חשיפת DB לצד שלישי.

ZDanielZ

New member
חשיפת DB לצד שלישי.

אהלן, אני עובד בחברה המפתחת מוצר שחלקו נחשף ע"י SDK למפתחים ולקוחות מצד שלישי, כלומר, אנשים שאין להם קשר ישיר לחברה, אבל מעוניינים להוסיף פיצ'רים או יכולות ספציפיות שהם צריכים בעצמם. בין השאר, אנחנו מעוניינים לחשוף להם את מסד הנתונים שלנו, ובפרט בצורה שתאפשר שאילתות SQL רגילות עליו, אך אנו לא בטוחים איך מקובל לעשות את זה... האם ב API מיוחד עבור ה DB? האם לאפשר גישה ישירה ל DB? אם כן, איך, תחת אילו מגבלות? אשמח לשמוע כל עצה בנושא, בעיקר לגבי מה מקובל. תודה, דניאל
 

hg1979

New member
בשום אופן אין לאפשר גישת SQL ישירה

זו צריכה להיות נקודת הפתיחה, מכאן יש כמה אפשרויות שתלויות באופי הממשק לבסיס הנתונים של, אם הממשק הוא דיי דליל בתעבורה, אז WEB SERVICE אמור להתאים, אפשר לחשוב גם על DLL של COM או .Net. אם תאפשר גישה ישירה לבסיס נתונים, תגביל את עצמך בפיתוח עתידי ("אתה לא יכול לשנות את השדה הזה, אתה תהרוס לי את הממשק אצל 7 לקוחות...")
 

עידו פ

New member
כפי שציינו

הגישה הרווחת היא לא לחשוף את האופן בו אתה שומר נתונים כלפי מי שמשתמש במוצר שלך. הדבר תקף לכל אמצעי שמירת נתונים, בין אם בקבצים בפורמט פנימי שלך, או ב-SQL לפי מבנה טבלאות שאתה הגדרת שמתאים לכלי אותו אתה מפתח. אם ברצונך לחשוף את המידע שלך, הגישה המקובלת היא לחשוף אותו באמצעות שירות (Service) שהוא מהווה החזות (Facade) של מסד הנתונים. מה שנותר לך להגדיר הם הפעולות שאותן השירות מספק ועד כמה הפעולות האלו חתומות ומוגדרות. אתה יכול להפוך את השירות לגנרי ומיותר ע"י כך שתגיד - השירות מקבל שאילתת SQL, מריץ אותה ומחזיר את התוצאה - בשביל זה לא צריך למעשה שירות, וגישה זו אינה נכונה ואף יש לה כינוי - Loosey Goosey AntiPattern הדרך היותר נכונה היא לזהות את דרישות הלקוח שלך מבחינת אחזורי המידע שהוא יצטרך (אני משער שאת העדכונים הוא מבצע דרך ה-SDK), ולכן ייתכן שהשירות שתספק יהיה יותר ברמת "אחזר פרטי X לפי Y" ואז השירות יודע שהוא מקבל Y ומחזיר X. בצורה זו אתה מגדיר מה השירות יודע לעשות ומסתיר מצרכן השירות כיצד למעשה נתונים אלו נשמרים ב-DB. את השירות תמיד ניתן להרחיב לפי דרישת הלקוח ובכך לאפשר לו לקבל פרטים נוספים שלא ניתנה להן תמיכה בעבר (מאחר ואתה לא חושף את כל ה-DB אלא רק את החלקים שנראו לך רלוונטיים). מבחינת שיטות למתן השירות - השיטות מגוונות ויכולות לנוע מ-DLL, דרך WebService ולמעשה גם יכולות להיות ע"י Views על ה-DB (אם כי שיטה זו קצת יותר מוגבלת מבחינת אספקטים של אבטחה, שימושיות ותחזוקתיות)
 
למעלה