מסמך זה עוסק בטכניקות מסוימות שבהן ניתן להשתמש כדי לשפר את ביצועי האפליקציה. במקרים מסוימים, דוגמאות של ממשקי API אחרים או ממשקי API כלליים משמשות להמחשת הרעיונות שמוצגים. עם זאת, אותם עקרונות חלים על Google Ad Experience Report API.
דחיסה באמצעות gzip
דרך קלה ונוחה לצמצום רוחב הפס הדרוש לכל בקשה היא להפעיל דחיסת Gzip. למרות שהדבר דורש זמן נוסף של מעבד (CPU) כדי לחלץ את התוצאות, בדרך כלל הכדאיות מבחינת העלות של הרשת היא משתלמת מאוד.
כדי לקבל תגובה בקידוד gzip, יש לבצע שתי פעולות: להגדיר כותרת Accept-Encoding
, ולשנות את סוכן המשתמש כך שיכיל את המחרוזת gzip
. הנה דוגמה לכותרות HTTP שנוצרו כראוי להפעלת דחיסת gzip:
Accept-Encoding: gzip User-Agent: my program (gzip)
עבודה עם משאבים חלקיים
דרך נוספת לשיפור הביצועים של קריאות ל-API היא לבקש רק את החלק מהנתונים שמעניינים אתכם. כך האפליקציה שלך תוכל להימנע מהעברה, ניתוח ואחסון של שדות מיותרים, כך שתוכלו להשתמש במשאבים כמו רשת, מעבד (CPU) וזיכרון.
תגובה חלקית
כברירת מחדל, השרת שולח חזרה ייצוג מלא של משאב אחרי עיבוד בקשות. לביצועים טובים יותר, אפשר לבקש מהשרת לשלוח רק את השדות הדרושים לכם ולקבל תגובה חלקית במקום זאת.
כדי לבקש תגובה חלקית, צריך להשתמש בפרמטר הבקשה fields
כדי לציין את השדות שרוצים להחזיר. אפשר להשתמש בפרמטר הזה עם כל בקשה שמחזירה נתוני תגובה.
דוגמה
הדוגמה הבאה מציגה את השימוש בפרמטר fields
עם ממשק API גנרי (בדיוני) "Demo" API.
בקשה פשוטה: בקשת HTTP זו GET
משמיטה את הפרמטר fields
ומחזירה את המשאב המלא.
https://www.googleapis.com/demo/v1
תגובה מלאה של המשאב: הנתונים של המשאב המלא כוללים את השדות הבאים, לצד שדות רבים אחרים שהושמטו בשל קיצור.
{ "kind": "demo", ... "items": [ { "title": "First title", "comment": "First comment.", "characteristics": { "length": "short", "accuracy": "high", "followers": ["Jo", "Will"], }, "status": "active", ... }, { "title": "Second title", "comment": "Second comment.", "characteristics": { "length": "long", "accuracy": "medium" "followers": [ ], }, "status": "pending", ... }, ... ] }
בקשה לתגובה חלקית: הבקשה הבאה למשאב הזה משתמשת בפרמטר fields
כדי לצמצם באופן משמעותי את כמות הנתונים שהוחזרו.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
תגובה חלקית: בתגובה לבקשה שלמעלה, השרת שולח תגובה שמכילה רק את המידע מהסוג ומערך של פריטים פשוטים שכוללים רק כותרת HTML ומאפייני אורך.
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
שימו לב שהתגובה היא אובייקט JSON שכולל רק את השדות שנבחרו ואת אובייקטי האב שלהם.
בהמשך מוסבר איך לקבוע את הפורמט של הפרמטר fields
, ומפורט בו פרטים נוספים על ההחזרה המדויקת של התגובה.
סיכום התחביר של פרמטר השדות
הפורמט של ערך הפרמטר fields
של הבקשה מבוסס באופן רופף על בסיס התחביר של XPath. בהמשך מפורט תקציר התחביר הנתמך, ודוגמאות נוספות מפורטות בקטע הבא.
- יש להשתמש ברשימה המופרדת בפסיקים כדי לבחור מספר שדות.
- אפשר להשתמש ב-
a/b
כדי לבחור שדהb
שנמצא בתוך השדהa
; להשתמש ב-a/b/c
כדי לבחור שדהc
בתוךb
.
חריג לכלל זה: עבור תגובות API שנעשה בהן שימוש ב-"data" wrappers, שבהם התגובה מקוננת בתוך אובייקט
data
שנראה כמוdata: { ... }
, אין לכלול "data
" במפרטfields
. הכללת אובייקט הנתונים במפרט שדות כמוdata/a/b
גורמת לשגיאה. במקום זאת, צריך להשתמש במפרט שלfields
כמוa/b
. - אפשר להשתמש בבורר משנה כדי לבקש קבוצה של שדות משנה ספציפיים של מערכים או אובייקטים. כדי לעשות זאת, יש להציב ביטויים בסוגריים ומירכאות.
( )
"לדוגמה: הפונקציה
fields=items(id,author/email)
מחזירה רק את מזהה הפריט ואת כתובת האימייל של המחבר עבור כל רכיב במערך הפריטים. אפשר גם לציין שדה משנה יחיד, כאשרfields=items(id)
הוא שווה ערך ל-fields=items/id
. - אפשר להשתמש בתווים כלליים לחיפוש בבחירות השדות, אם יש צורך.
לדוגמה: הפונקציה
fields=items/pagemap/*
בוחרת את כל האובייקטים במפת דף.
דוגמאות נוספות לשימוש בפרמטר שדות
הדוגמאות הבאות כוללות תיאורים לגבי ההשפעה של ערך הפרמטר fields
על התגובה.
הערה:כמו בכל הערכים של פרמטר השאילתה, ערך הפרמטר fields
חייב להיות מקודד בכתובת ה-URL. כדי שהניסוח יהיה קריא יותר, הדוגמאות שבמסמך הזה הושמטו.
- עליכם לזהות את השדות שרוצים להחזיר או לבחור באפשרות בחירת שדות.
- הערך של פרמטר הבקשה
fields
הוא רשימה של שדות המופרדים בפסיקים, וכל שדה מצוין ביחס לשורש התגובה. לכן, אם אתם מבצעים פעולה מסוג רשימה, התגובה היא אוסף ולרוב יש בה מערך של משאבים. אם אתם מבצעים פעולה שמחזירה משאב אחד, השדות מצוינים ביחס למשאב הזה. אם השדה שבחרתם הוא מערך (או שהוא חלק ממערך), השרת יחזיר את החלק שנבחר מכל הרכיבים במערך.
הנה כמה דוגמאות ברמת האוסף:
דוגמאות השפעה items
מחזירה את כל הרכיבים במערך הפריטים, כולל כל השדות ברכיב, ללא שדות אחרים. etag,items
פונקציה זו מחזירה את השדה etag
ואת כל הרכיבים במערך הפריטים.items/title
מחזירה רק את השדה title
עבור כל הרכיבים במערך הפריטים.
בכל פעם שמוחזר שדה מקונן, התגובה כוללת את אובייקטים הכלולים בסוגריים. השדות הראשיים לא כוללים שדות צאצא נוספים, אלא אם הם נבחרים באופן מפורש.context/facets/label
מחזירה רק את השדה label
עבור כל החברים במערךfacets
, שנמצא בתוך האובייקטcontext
.items/pagemap/*/title
לכל רכיב במערך הפריטים, מוחזר רק השדה title
(אם קיים) של כל האובייקטים שהם צאצא שלpagemap
.
הנה כמה דוגמאות ברמת המשאב:
דוגמאות השפעה title
פונקציה זו מחזירה את השדה title
של המשאב המבוקש.author/uri
פונקציה זו מחזירה את שדה המשנה uri
של האובייקטauthor
במשאב המבוקש.links/*/href
מחזירה את השדה href
של כל האובייקטים שהם צאצא שלlinks
. - מבקשים רק חלקים מהשדות הספציפיים באמצעות סלקות משנה.
- כברירת מחדל, אם הבקשה מציינת שדות מסוימים, השרת יחזיר את האובייקטים או רכיבי המערך בשלמותם. ניתן לציין תגובה שכוללת רק שדות משנה מסוימים. ניתן לעשות זאת באמצעות &מירכאות;
( )
" תחביר של בחירת משנה, כמו בדוגמה שבהמשך.דוגמה השפעה items(title,author/uri)
מחזירה רק את הערכים של title
ושל המחבר'suri
של כל רכיב במערך הפריטים.
טיפול בתגובות חלקיות
לאחר ששרת מעבד בקשה חוקית שכוללת את פרמטר השאילתה fields
, הוא שולח חזרה קוד סטטוס HTTP 200 OK
, ביחד עם הנתונים המבוקשים. אם פרמטר השאילתה fields
מכיל שגיאה או שהוא לא חוקי מסיבה אחרת, השרת מחזיר קוד סטטוס HTTP 400 Bad Request
, לצד הודעת שגיאה שמראה למשתמש מה היה שגוי בבחירת השדות (לדוגמה, "Invalid field selection a/b"
).
לפניכם דוגמה לתגובה חלקית המוצגת בקטע המבוא שלמעלה. הבקשה משתמשת בפרמטר fields
כדי לציין אילו שדות יש להחזיר.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
התגובה החלקית נראית כך:
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
הערה: בממשקי API שתומכים בפרמטרים של שאילתות לעימוד נתונים (לדוגמה, maxResults
ו-nextPageToken
), אפשר להשתמש בפרמטרים האלה כדי לצמצם את התוצאות של כל שאילתה לגודל מנוהל. אחרת, ייתכן שהביצועים שיתקבלו לא יהיו אפשריים, אם לא תתקבל תגובה חלקית.