במאמר הזה מוסבר איך ליצור בקשות API ולטפל בתגובות API מ-Compute Engine API. הוא עוזר במשימות כמו:
- יוצרים את גוף הבקשה.
- קובעים את ה-URIs של המשאבים שנדרשים לבקשה.
- טיפול בתגובות מה-API.
- לדעת אם בקשת API הצליחה.
במאמר הזה לא מוסבר איך לבצע אימות ל-API. כדי לקבל מידע על אימות ל-API, אפשר לקרוא את המאמר אימות ל-Compute Engine.
לפני שמתחילים
- מומלץ לקרוא על ממשקי API ל-REST.
- איך מאמתים את Compute Engine API.
יצירת בקשת API
ה-Compute Engine API מצפה שגופי בקשות ה-API יהיו בפורמט JSON.
כדי לשלוח בקשת API, אפשר לשלוח בקשת HTTP ישירה באמצעות כלים כמו curl או httplib2, או להשתמש באחת מספריות הלקוח הזמינות.
כששולחים בקשת HTTP ישירה, אפשר לציין את הגרסה שהשרת צריך להגיב איתה. מומלץ לציין גרסת API, כי כך האפליקציה יציבה יותר ויש לכם שליטה על המועד שבו תתחילו להשתמש בתכונות חדשות של השירות.
בבקשות API שדורשות גוף בקשה, כמו בקשות POST, PUT או PATCH, גוף הבקשה כולל את מאפייני המשאב שרוצים להגדיר בבקשה הזו.
דוגמאות לבקשות API
פקודת curl הבאה שולחת בקשת POST אל ה-method instances.insert עם גרסת API 2026-09-01. הבקשה יוצרת מכונה עם הפרמטרים project ו-zone שמוגדרים בכתובת ה-URL, והמאפיינים של המכונה שמוגדרים בגוף הבקשה. גוף הבקשה מסומן בדגל -d.
כדי לציין את גרסת ה-API, אפשר להשתמש בפרמטר השאילתה $apiVersion או בכותרת X-Goog-Api-Version. מידע נוסף זמין במאמר בנושא AIP-184.
גרסה בפרמטר של שאילתה
כדי לציין את גרסת ה-API בפרמטר השאילתה, צריך לכלול את פרמטר השאילתה %24apiVersion עם גרסת ה-API שנבחרה.
curl -X POST -H "Authorization: Bearer [OAUTH_TOKEN]" \
-H "Content-Type: application/json" \
"https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances?%24apiVersion=2026-09-01" -d \
'{
"disks":[
{
"boot":"true",
"initializeParams":{
"sourceImage":"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-10-buster-v20210122"
}
}
],
"machineType":"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
"name":"VM_NAME",
"networkInterfaces":[
{
"accessConfigs":[
{
"name":"external-nat",
"type":"ONE_TO_ONE_NAT"
}
],
"network":"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default"
}
]
}'הגרסה בכותרת
כדי לציין את גרסת ה-API בכותרת, צריך לכלול את הכותרת X-Goog-Api-Version עם גרסת ה-API שנבחרה.
curl -X POST -H "Authorization: Bearer [OAUTH_TOKEN]" \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Version: 2026-09-01" \
"https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances" -d \
'{
"disks":[
{
"boot":"true",
"initializeParams":{
"sourceImage":"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-10-buster-v20210122"
}
}
],
"machineType":"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
"name":"VM_NAME",
"networkInterfaces":[
{
"accessConfigs":[
{
"name":"external-nat",
"type":"ONE_TO_ONE_NAT"
}
],
"network":"https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/default"
}
]
}'ל-URI של התמונה יש מזהה פרויקט שונה (debian-cloud) ממזהה הפרויקט שלכם, כי התמונות שייכות לפרויקטים שונים, בהתאם לסוג התמונה.
לדוגמה, כל קובצי ה-Debian image שזמינים לציבור ומוצעים על ידי Compute Engine מתארחים בפרויקט debian-cloud.
כשמפנים למשאב אחר, צריך להשתמש ב-URI המוגדר במלואו של המשאב.
לדוגמה, המאפיין network משתמש במזהה משאבים אחיד (URI) מוגדר במלואו כדי להתייחס לרשת default.
בקשות API באמצעות ספריות לקוח
ספריות לקוח מספקות דרך פשוטה יותר ליצור בקשות API. הם תומכים בגרסאות יציבות ובגרסאות בתצוגה מקדימה של ה-API.
ממשקי API בתצוגה מקדימה נתמכים בשפות מסוימות כגרסאות לקוח לפני ההשקה, עם סיומות כמו -preview.1 או -rc.1.
Python
Java
יצירת כתובות URI של משאבים
ב-Compute Engine API, הפניה למשאב אחר Google Cloud מופיעה כ-URI מוגדר במלואו:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/RESOURCE_TYPE/SPECIFIC_RESOURCE
בכל פעם שמציינים תמונה, סוג מכונה, רשת או כל משאב אחר, צריך לספק את ה-URI של המשאב כשמשתמשים ב-API. כלים ללקוחות כמו Google Cloud CLI ומסוף Google Cloud מסתירים את המורכבות הזו ומטפלים ביצירה של מזהי ה-URI של המשאבים האלה בשבילכם, אבל כשמתקשרים עם ה-API ישירות, צריך ליצור את מזהי ה-URI של המשאבים האלה בעצמכם.
יש מזהי URI שונים למשאבים מסוגים שונים. לדוגמה, למשאב של תחום מוגדר יש את המפרט zone ב-URI:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2
משאבים אזוריים מחליפים את המפרט zone במפרט region:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
באופן דומה, משאבים גלובליים כוללים את המפרט global:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/VM_NAME
Compute Engine API מקבל גם כתובות URI חלקיות, כי השירות יכול להסיק מידע כמו מזהה הפרויקט. לכן, גם הגרסאות החלקיות הבאות של מזהי ה-URI הקודמים מקובלות:
zones/ZONE/machineTypes/e2-standard-2
regions/REGION/addresses/ADDRESS_NAME
project/PROJECT_ID/global/images/VM_NAME
ב-URI החלקיים, גם ה-URI האזורי וגם ה-URI של האזור לא כללו את מזהה הפרויקט, אבל ה-URI של התמונה כן כלל אותו. הסיבה לכך היא שתמונות שזמינות לציבור ומוצעות על ידי Compute Engine מתארחות בפרויקטים אחרים, כמו debian-cloud לכל תמונות Debian ו-ubuntu-os-cloud לכל תמונות Ubuntu. כדי להשתמש בתמונות האלה, צריך לספק את מזהה הפרויקט המתאים. אם לא מציינים את מזהה הפרויקט של התמונות, מערכת Compute Engine מנסה למצוא את התמונה בפרויקט, והבקשה נכשלת כי התמונה לא קיימת.
עם זאת, אם משתמשים בתמונה בהתאמה אישית ששייכת לפרויקט (אותו פרויקט שבו יוצרים את המשאב הזה), אפשר להשמיט את הגדרת הפרויקט כשמספקים URI של תמונה.
איך קובעים אילו מאפיינים נדרשים
במסמכי העזר של Compute Engine API, שזמינים לממשקי IBV API ולממשקי CBV API בגרסה 1 ובגרסת בטא, מפורטות כל האפשרויות להגדרת מאפיינים של משאב ספציפי. במסמכי העזר יש הבחנה בין מאפיינים שניתנים לשינוי לבין מאפיינים שלא ניתן לשנות (מסומנים ב-[Output Only] בתיאור המאפיין), אבל כדי לדעת אילו מאפיינים נדרשים למשאב מסוים, צריך לעיין במסמכים שספציפיים למשימה הזו.
לדוגמה, אם אתם יוצרים מכונה וירטואלית, כדאי לקרוא את התיעוד בנושא יצירת מכונה וירטואלית מתמונה כדי לראות את מאפייני ה-API שנדרשים לבקשה. אם רוצים ליצור כתובת IP חיצונית סטטית ב-API, אפשר לקרוא את מסמכי התיעוד בנושא כתובות IP חיצוניות סטטיות.
אימות בקשות API
כדי לאמת את בקשות ה-API:
במסמכי העיון של Compute Engine API, מחפשים את ה-method שהקוד קורא לה. לדוגמה,
v1/compute.instances.insertאו2026-09-01/compute.instances.insert.בתפריט התוכן, לוחצים על אפשר לנסות. ייפתח החלון אפשר לנסות את השיטה הזו.
בקטע Request parameters (פרמטרים של בקשה), לא צריך לציין project (פרויקט) או zone (אזור) כי לא צריך לשלוח את הבקשה כדי לבצע אימות.
בשיטות IBV בלבד, בקטע X-Goog-Api-Version, בוחרים את גרסת ה-API.
בקטע Request body, מדביקים את הבקשה.
אלמנטים בבקשה שהפורמט שלהם שגוי יודגשו בקו תחתון כחול. כדי לקבל מידע נוסף על הבעיה שצריך לטפל בה, אפשר ללחוץ על כל אחד מהקטעים המודגשים בקו.
טיפול בתגובות מה-API
אם שולחים בקשה שמשנה נתונים, Compute Engine מחזיר אובייקט Operation שאפשר לשלוח לו בקשות חוזרות כדי לקבל את הסטטוס של הפעולות שקשורות לבקשה. משאב Operation נראה כך:
{
"kind": "compute#operation",
"id": "7127550864823803662",
"name": "operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b",
"zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE",
"operationType": "insert",
"targetLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM",
"targetId": "4132355614508179214",
"status": "PENDING",
"user": "user@example.com",
"progress": 0,
"insertTime": "2016-03-24T14:53:37.788-07:00",
"selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b"
}אם הבקשה המקורית היא לשנות משאב של תחום מוגדר – לדוגמה, ליצור תמונת מצב של דיסק או להפסיק מכונה – Compute Engine מחזיר אובייקט zoneOperations. באופן דומה, משאבים אזוריים וגלובליים מחזירים אובייקט regionOperations או globalOperations, בהתאמה. כדי לקבל את הסטטוס של פעולה, צריך לבצע בקשה באמצעות השיטה get או wait למשאב הספציפי Operation ולציין את name של הפעולה.
הבקשה תושלם רק אחרי שהסטטוס של המשאב Operation יהיה DONE. התהליך הזה עשוי להימשך זמן מה, בהתאם לאופי הבקשה. אחר כך, אחרי שהסטטוס של רכיב Operation חוזר כ-DONE, אפשר לבדוק אם הפעולה הצליחה ואם היו שגיאות.
לדוגמה, התגובה הבאה מציינת שהפעולה הקודמת הושלמה, כפי שמצוין בסטטוס DONE:
endTime: '2016-03-24T14:54:07.119-07:00' id: '7127550864823803662' insertTime: '2016-03-24T14:53:37.788-07:00' kind: compute#operation name: operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b operationType: insert progress: 100 selfLink: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1458856416788-52ed27a803e22-1c3bd86a-9e95017b startTime: '2016-03-24T14:53:38.397-07:00' status: DONE targetId: '4132355614508179214' targetLink: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM user: user@example.com zone: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE
כדי לוודא, שולחים בקשת get למשאב כדי לבדוק שהוא קיים ופועל. לדוגמה:
GET /compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM
{
"cpuPlatform": "Intel Haswell",
"creationTimestamp": "2016-03-24T14:53:37.170-07:00",
"disks": [
..[snip]..
],
"selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/EXAMPLE_VM",
"status": "RUNNING",
"tags": {
"fingerprint": "42WmSpB8rSM="
},
"zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE"
}פעולות דגימה
אפשר לכתוב קוד שידגום את הפעולה באופן תקופתי באמצעות בקשת get או wait, שתחזיר תשובה כשהסטטוס של הפעולה יהיה DONE.
בבקשת get, הפעולה מוחזרת באופן מיידי, ללא קשר לסטטוס שלה. צריך לבצע דגימה של הפעולה באופן קבוע כדי לדעת מתי היא מסתיימת.
אם שולחים בקשת wait, הבקשה מוחזרת כשהפעולה DONE או אם הבקשה מתקרבת למועד האחרון של 2 דקות. אפשר להשתמש בשיטות wait או get כדי לדגום את הפעולות, אבל לשיטה wait יש יתרונות מסוימים לעומת השיטה get:
- אתם יכולים להגדיר את הלקוחות כך שיבדקו את סטטוס הפעולה בתדירות נמוכה יותר, וכך להקטין את השימוש ב-QPS של Compute Engine API.
- זמן האחזור הממוצע בין סיום הפעולה לבין העדכון של הלקוח על סיום הפעולה קצר משמעותית, כי השרת מגיב ברגע שהפעולה מסתיימת.
- השיטה מספקת זמני המתנה מוגבלים. השיטה ממתינה לזמן שמוגדר כברירת מחדל לזמן קצוב לתפוגה של HTTP (2 דקות) ואז מחזירה את המצב הנוכחי של הפעולה, שיכול להיות
DONEאו עדיין בתהליך.
ה-method wait היא API מסוג best-effort. אם השרת עמוס מדי, יכול להיות שהבקשה תחזור לפני שהיא תגיע למועד האחרון שמוגדר כברירת מחדל, או אחרי המתנה של אפס שניות בלבד. בנוסף, לא מובטח שהשיטה תחזיר ערך רק כשהפעולה היא DONE. לדוגמה, אם הבקשה מתקרבת למועד האחרון של 2 דקות, השיטה מחזירה גם אם הפעולה לא הסתיימה. כדי לבדוק את הפעולות, מומלץ להשתמש בשיטה wait או בשיטה get – בלולאת ניסיון חוזר עם השהיה בין הניסיונות – כדי לדגום מעת לעת את סטטוס הפעולה. המרווח המקסימלי לניסיון חוזר לא יכול להיות ארוך יותר ממשך השמירה המינימלי של הפעולה.
דוגמה לסקר
בדוגמאות הבאות נעשה שימוש במתודה get. אפשר להחליף את השיטה get בשיטה wait: