טיפים לשיפור הביצועים

במסמך הזה מתוארות כמה טכניקות שבהן אפשר להשתמש כדי לשפר את הביצועים של האפליקציה. במקרים מסוימים, דוגמאות של ממשקי API אחרים או ממשקי API כלליים משמשות להמחשת הרעיונות המוצגים. עם זאת, אותם עקרונות רלוונטיים ל-Google Content API for Shopping.

דחיסה באמצעות gzip

דרך קלה ונוחה לצמצם את רוחב הפס הדרוש לכל בקשה היא להפעיל דחיסת gzip. על אף שהדבר דורש זמן נוסף של CPU כדי לבטל את דחיסת התוצאות, בדרך כלל האיזון עם עלויות הרשת משתלם מאוד.

כדי לקבל תגובה בקידוד gzip, עליך לבצע שתי פעולות: להגדיר כותרת Accept-Encoding, ולשנות את סוכן המשתמש כך שיכלול את המחרוזת gzip. הנה דוגמה לכותרות HTTP במבנה תקין להפעלת דחיסת gzip:

Accept-Encoding: gzip
User-Agent: my program (gzip)

עבודה עם משאבים חלקיים

דרך נוספת לשיפור הביצועים של קריאות ה-API היא לבקש רק את החלק של הנתונים שמעניינים אתכם. כך האפליקציה תוכל להימנע מהעברה, מניתוח ומאחסון של שדות לא נחוצים, וכדי להשתמש במשאבים בצורה יעילה יותר, כולל הרשת, המעבד (CPU) והזיכרון.

תגובה חלקית

כברירת מחדל, השרת שולח חזרה את הייצוג המלא של משאב לאחר עיבוד הבקשות. כדי לקבל ביצועים טובים יותר, אפשר לבקש מהשרת לשלוח רק את השדות שאתם באמת צריכים, ולקבל במקום זאת תגובה חלקית.

כדי לבקש תגובה חלקית, יש להשתמש בפרמטר הבקשה fields כדי לציין את השדות שברצונך להחזיר. אפשר להשתמש בפרמטר הזה עם כל בקשה שתחזיר נתוני תגובה.

דוגמה

הדוגמה הבאה מציגה את השימוש בפרמטר fields עם ה-API הגנרי (הבדיוני) של Demo.

בקשה פשוטה: בקשת ה-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 שנעשה בהן שימוש ב-wrappers של "data", שבהם התגובה מוצבת בתוך אובייקט 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 ושל uri של הרכיב לכל רכיב במערך הפריטים.

טיפול בתגובות חלקיות

לאחר שהשרת מעבד בקשה חוקית שכוללת את פרמטר השאילתה 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, לדוגמה), אפשר להשתמש בפרמטרים האלה כדי לצמצם את התוצאות של כל שאילתה לגודל שאפשר לנהל. אחרת, ייתכן שהמערכת לא תצליח לממש את הביצועים תוך מתן תגובה חלקית.