מבוא
תוכלו להשתמש בשירות Discovery של Google APIs כדי לבנות מגוון כלים שונים לשימוש עם Google APIs. עם זאת, המטרה העיקרית של מסמך Discovery היא לאפשר ל-Google ליצור ספריות לקוח בשפות תכנות שונות. בסעיף הזה נסביר איך תוכלו ליצור ספריית לקוח מותאמת אישית עבור Google APIs.
ספריית לקוח יציבה ומלאה בתכונות היא כלי מסובך שיכול להימשך חודשים. עם זאת, ההוראות הכלליות לבניית ספריית לקוח פשוטה עבור ממשקי API של Google ניתנות לפירוט בשלושה שלבים פשוטים:
- אחזור מסמך ה-Discovery ובניית ממשק API
- כתיבת בקשה
- התקשרות ואחזור של התגובה
שלבים אלה מתוארים בפירוט רב בקטעים הבאים. אפשר גם לעיין בדוגמה של הלקוח של ממשקי API פשוטים בקטע 'דוגמאות' כדי לראות את ההוראות שממופים לקוד.
שלב 1: אחזור של מסמך Discovery
לפני שמתחילים להטמיע ספריית לקוחות, יש כמה דרישות בסיסיות שמשפיעות על ההתקדמות שלכם במסלול הפיתוח. לדוגמה, יכול להיות ששפת התכנות שבחרתם הוקלדה או שלא הוקלדה. אם היא מוקלדת, היא יכולה להיות סטטית או דינמית. אפשר להדר אותו או לפרש אותו. הדרישות האלה יסייעו לכם לצרוך את מסמך ה-Discovery ולהשתמש בו.
משימת הפיתוח הראשונה היא לאחזר את מסמך Discovery. האסטרטגיה שבה רוצים לאחזר את המסמך נקבעת על סמך הדרישות שציינתם. לדוגמה, בשפה שמקלידים בצורה סטטית, תוכלו לאחזר את מסמך Discovery בשלב מוקדם בתהליך, ואז ליצור קוד שיטפל ב-API הספציפי שמתואר במסמך Discovery. אם מדובר בשפה כתובה היטב, כדאי ליצור קוד וליצור ספרייה מורכבת. עבור שפה שהוקלדה באופן דינמי, ניתן לבנות את מבני התכנות בהדרגה כדי שיוכלו ליצור ממשק API תוך כדי תנועה, תוך כדי שימוש במשטח התכנות.
שלב 2: כותבים בקשה
חישוב בקשה מורכב משני שלבים נפרדים:
- מחברים את גוף הבקשה.
- אנחנו יוצרים את כתובת ה-URL של הבקשה.
אם רוצים, אתם צריכים להמיר את גוף הבקשה מייצוג שמתאים לשפה לפורמט ההעברה הנכון. לדוגמה, ספריית לקוח ב-Java יכולה לכלול מחלקה לכל סוג בקשה המאפשרת מניפולציה על נתוני הבקשה בצורה בטוחה, וניתן לערוך אותה ב-JSON.
יצירת כתובת ה-URL של הבקשה היא תהליך קצת יותר מורכב.
הנכס path
של כל שיטה ב-API משתמש בתחביר URI של תבנית v04. הנכס הזה עשוי להכיל משתנים, שמוקפים בסוגריים מסולסלים. דוגמה לנכס path
עם משתנים:
/example/path/var
בנתיב שלמעלה, var
הוא משתנה. הערך של המשתנה הזה מגיע מהקטע parameters
במסמך Discovery של השיטה הזו. לכל שם משתנה יש ערך תואם באובייקט parameters
. בדוגמה שלמעלה, יש פרמטר בשם var
בקטע parameters
(ונכס location
שלו הוא path
כדי לציין שהוא משתנה נתיב).
בעת שליחת בקשה, יש להחליף את הערך של var
בכתובת ה-URL. לדוגמה, אם המשתמש בספרייה יבחר באפשרות שמגדירה את var
לערך foo
, כתובת ה-URL החדשה תהיה /example/path/foo
.
חשוב לזכור שהנכס path
הוא URI יחסי. כך מחשבים את ה-URI המוחלט:
יש לשלוף את הנכס
rootUrl
מהרמה העליונה של מסמך Discovery.
לדוגמה, הנכסrootUrl
במסמך ה-Discovery של Google Cloud Service Management API הוא:https://servicemanagement.googleapis.com/
יש למשוך את
servicePath
מהרמה העליונה של מסמך Discovery.
לדוגמה, המאפייןservicePath
במסמך Discovery של Google Cloud Service Management API ריק.משייכים אותם יחד כדי לקבל:
https://servicemanagement.googleapis.com/
יש לתפוס את המאפיין
path
, להרחיב אותו כתבנית URI ולשלב את התוצאות של ההרחבה עם ה-URI מהשלב הקודם.
לדוגמה, בשיטת השירותget
של Google Cloud Service Management API, הערך של המאפייןpath
הואv1/services/{serviceName}
. לכן, ה-URI המלא של השיטה הוא:https://servicemanagement.googleapis.com/v1/services/{serviceName}
כדי להפעיל את Google Cloud Service Management API צריך מפתח API. לכן, אחרי שמחילים מפתח API, ה-URI המלא מאפשר לקבל את הגדרת השירות של API Discovery:
https://servicemanagement.googleapis.com/v1/services/discovery.googleapis.com?key=API_KEY
שלב 3: מתקשרים וטיפול בתגובה
לאחר שליחת הבקשה, עליכם להסיר את תוכן התגובה מהייצוג הרלוונטי, ולטפל בבעיות שגיאה שעשויות להתרחש – גם בתעבורת HTTP הבסיסית וגם בהודעות שגיאה שנוצרו משירות ה-API. פורמט השגיאות מתועד כחלק ממדריך הסגנון של Google JSON.
דוגמאות
במסמך ספריות ודוגמאות תמצאו דוגמאות קונקרטיות לשימוש בספריות לקוח ובכלים שהוטמעו באמצעות שירות Discovery של Google APIs. בנוסף, הקטע הבא מספק דוגמה פשוטה של ספריית לקוח בממשקי API.
לקוח של ממשקי API פשוטים
לפניכם דוגמה לספריית לקוחות פשוטה מאוד שכתובה ב-Python3 . הלקוח בונה ממשק לאינטראקציה עם ה-Google Cloud Service Management API, ואז מקבל את הגדרת השירות של API Discovery Service באמצעות הממשק הזה.
אזהרה: הקוד שלמטה הוא גרסה פשוטה יותר של ספריית לקוח אופיינית. זו הטמעה חלקית שלא מספיקה כדי להדגים היבטים מסוימים בבניית ספריית לקוח. הקוד הזה לא מוכן לייצור.
import httplib2 import json import uritemplate import urllib # Step 1: Fetch Discovery document DISCOVERY_URI = "https://servicemanagement.googleapis.com/$discovery/rest?version=v1" h = httplib2.Http() resp, content = h.request(DISCOVERY_URI) discovery = json.loads(content) # Step 2.a: Construct base URI BASE_URL = discovery['rootUrl'] + discovery['servicePath'] class Collection(object): pass def createNewMethod(name, method): # Step 2.b Compose request def newMethod(**kwargs): body = kwargs.pop('body', None) url = urllib.parse.urljoin(BASE_URL, uritemplate.expand(method['path'], kwargs)) for pname, pconfig in method.get('parameters', {}).items(): if pconfig['location'] == 'path' and pname in kwargs: del kwargs[pname] if kwargs: url = url + '?' + urllib.parse.urlencode(kwargs) return h.request(url, method=method['httpMethod'], body=body, headers={'content-type': 'application/json'}) return newMethod # Step 3.a: Build client surface def build(discovery, collection): for name, resource in discovery.get('resources', {}).items(): setattr(collection, name, build(resource, Collection())) for name, method in discovery.get('methods', {}).items(): setattr(collection, name, createNewMethod(name, method)) return collection # Step 3.b: Use the client service = build(discovery, Collection()) print (service.services.get(serviceName='discovery.googleapis.com', key='API_KEY'))
הרכיבים העיקריים של הלקוח הם:
- שלב 1: אחזור מסמך הגילוי.
מסמך Discovery של Google Cloud Service Management API מאוחזר ומנותח במבנה נתונים. מאחר ש-Python הוא שפה שהוקלדה באופן דינמי, ניתן לאחזר את מסמך Discovery בזמן הריצה. - שלב 2.א: יצירת URI בסיסי.
ה-URI הבסיסי מחושב. - שלב 2.ב: כותבים את הבקשה.
כשמתבצעת קריאה לשיטה בקולקציה, תבנית ה-URI מורחבת עם הפרמטרים שמועברים לשיטה, ופרמטרים עם מיקום שלquery
נוספים לפרמטרים של השאילתה של כתובת ה-URL. לבסוף, כתובת ה-URL נשלחת באמצעות שיטת ה-HTTP שצוינה במסמך Discovery. - שלב 3.א: בונים את משטח הלקוח.
פני השטח של הלקוח בנויים באופן חוזר ונשנה על מסמך Discovery המנותח. לכל שיטה בקטעmethods
מצורפת שיטה חדשה לאובייקטCollection
. מאחר שהאוספים יכולים להיות מקוננים, אנחנו מחפשים אתresources
ובונים באופן רקורסיבי אובייקטCollection
לכל החברים בו, אם נמצא אחד כזה. כל אוסף מקונן מצורף גם כמאפיין לאובייקטCollection
. - שלב 3.ב: משתמשים בלקוח.
כך ניתן לראות את השימוש בממשק ה-API המובנה. קודם כל, אובייקט שירות נבנה מתוך מסמך Discovery, ואז הגדרת השירות של API Discovery Service מאוחזר דרך Google Cloud Service Management API.