אפשר להגדיר שלב בתהליך העבודה שיוצר קריאת HTTP, ולהקצות את התגובה מהקריאה למשתנה. לדוגמה, אפשר להפעיל Google Cloudשירות כמו פונקציות Cloud Run או Cloud Run באמצעות בקשת HTTP.
אל תתבלבלו בין הפעלה של שירות Google Cloud באמצעות בקשת HTTP לבין שימוש במחברים של Workflows כדי לבצע פעולות API. מחברים מפשטים את הקריאה לשירותים כי הם מטפלים בפורמט של הבקשות בשבילכם, ומספקים שיטות וארגומנטים כך שלא תצטרכו לדעת את הפרטים של Google Cloud API.
הפעלת נקודת קצה (endpoint) של HTTP
השלב הזה מאפשר לכם לשלוח בקשת HTTP. יש תמיכה בבקשות HTTP ו-HTTPS. לשיטות הנפוצות ביותר של בקשות HTTP יש קיצור דרך לקריאה (כמו http.get ו-http.post), אבל אפשר ליצור כל סוג של בקשת HTTP על ידי הגדרת השדה call ל-http.request וציון סוג הבקשה באמצעות השדה method.
YAML
- STEP_NAME: call: HTTP_REQUEST args: url: URL_VALUE method: REQUEST_METHOD private_service_name: "REGISTERED_SERVICE" headers: HEADER_KEY:HEADER_VALUE ... body: BODY_KEY:BODY_VALUE ... query: QUERY_KEY:QUERY_VALUE ... auth: type: AUTH_TYPE scope: AUTH_SCOPE scopes: AUTH_SCOPE audience: AUDIENCE timeout: TIMEOUT_IN_SECONDS result: RESULT_VALUE
JSON
[ { "STEP_NAME": { "call": "HTTP_REQUEST", "args": { "url": "URL_VALUE", "method": "REQUEST_METHOD", "private_service_name": "REGISTERED_SERVICE", "headers": {"HEADER_KEY":"HEADER_VALUE", ... }, "body": {"BODY_KEY":"BODY_VALUE", ... }, "query": {"QUERY_KEY":"QUERY_VALUE", ... }, "auth": { "type":"AUTH_TYPE", "scope":"AUTH_SCOPE", "scopes":"AUTH_SCOPE", "audience":"AUDIENCE" }, "timeout": "TIMEOUT_IN_SECONDS" }, "result": "RESULT_VALUE" } } ]
מחליפים את מה שכתוב בשדות הבאים:
-
HTTP_REQUEST: חובה. משתמשים באחת מהאפשרויות הבאות לבקשות HTTP:http.deletehttp.gethttp.patchhttp.posthttp.puthttp.request
-
URL_VALUE: חובה. כתובת ה-URL שאליה נשלחת הבקשה. -
REQUEST_METHOD: חובה אם משתמשים בסוג השיחהhttp.request. סוג ה-method של בקשת ה-HTTP שבה רוצים להשתמש. לדוגמה:GETPOSTPATCHDELETE
-
REGISTERED_SERVICE: אופציונלי. שם שירות רשום ב-Service Directory בפורמטprojects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME. מידע נוסף זמין במאמר הפעלת נקודת קצה פרטית באמצעות מרשם השירותים של Service Directory. -
HEADER_KEY:HEADER_VALUE: אופציונלי. שדות כותרת להזנת קלט ל-API.אם משתמשים בכותרת
Content-Typeכדי לציין את סוג המדיה של גוף הבקשה, רק הסוגים הבאים נתמכים:-
application/jsonאו application/type+json– צריך להיות מפה -
application/x-www-form-urlencoded– חייב להיות מחרוזת לא מקודדת -
text/type– חייב להיות מחרוזת
אם מציינים כותרת
Content-Type, הגוף מקודד לפי ההנחיות. לדוגמה, יכול להיות שזה יהיה JSON או קידוד תווים שמתאים לכתובות URL.אם משתמשים בכותרת
User-Agentכדי לזהות את סוכן המשתמש ששולח את הבקשה, צריך לפעול לפי ההנחיות הבאות:- ערך ברירת המחדל הוא
GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs). - אם מציינים ערך,
GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs)מצורף לערך הזהלדוגמה, אם מציינים את הערך
User-Agent: "MY_USER_AGENT_VALUE", כותרת בקשת ה-HTTP תהיה כפי שמוצג בהמשך (עם רווח בין הערך שצוין לבין ברירת המחדל שנוספה):MY_USER_AGENT_VALUE GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs)
-
-
BODY_KEY:BODY_VALUE: אופציונלי. שדות הגוף שבהם צריך לספק קלט ל-API.אם לא מציינים כותרת
Content-Type, ואם יש גוף בקשה, מתקיימים התנאים הבאים:- אם ערך הגוף הוא בבייט, הכותרת מוגדרת כ-
Content-Type: application/octet-stream. - אחרת, הגוף מקודד ב-JSON והכותרת מוגדרת ל-
Content-Type: application/json; charset=utf-8.
YAML
body: requests: - image: source: gcsImageUri: ${gsUri} features: - type: LABEL_DETECTION - type: SAFE_SEARCH_DETECTION - type: IMAGE_PROPERTIES result: imageAnalysisResponse
JSON
{ "requests":[ { "image": { "source": { "gcsUri": "img.png" } }, "features": [ { "type":"LABEL_DETECTION" }, { "type":"SAFE_SEARCH_DETECTION" }, { "type":"IMAGE_PROPERTIES" }, ] } ] }
- אם ערך הגוף הוא בבייט, הכותרת מוגדרת כ-
-
QUERY_KEY:QUERY_VALUE: אופציונלי. שדות שאילתה להזנת קלט ל-API. -
AUTH_TYPE: אופציונלי. חובה אם ממשק ה-API שאליו מתבצעת הקריאה דורש אימות. אפשר להשתמש ב-OIDCאו ב-OAuth2. מידע נוסף זמין במאמר בנושא שליחת בקשות מאומתות מתהליך עבודה.-
AUTH_SCOPE: אופציונלי. מגבילה את הגישה של אפליקציה לחשבון של משתמש. משתמשים במקשscopeאו במקשscopes.המפתח
scopeתומך במחרוזת או ברשימת מחרוזות. לדוגמה:"https://www.googleapis.com/auth/cloud-platform"או
["https://www.googleapis.com/auth/cloud-platform", "scope2", "scope3"]המפתח
scopes, בנוסף לתמיכה במחרוזת או ברשימה של מחרוזות, תומך במחרוזות שמופרדות ברווחים ומופרדות בפסיקים. לדוגמה:"https://www.googleapis.com/auth/cloud-platform scope2 scope3"או
"https://www.googleapis.com/auth/cloud-platform,scope2,scope3"מידע נוסף זמין במאמר היקפי OAuth 2.0 ל-Google APIs.
-
AUDIENCE: אופציונלי. מציין את הקהל של אסימון OIDC. כברירת מחדל, הערך שמוגדר הוא אותו ערך כמוurl, אבל צריך להגדיר אותו ככתובת הבסיס של השירות. לדוגמה:https://region-project.cloudfunctions.net/hello_world.
-
-
TIMEOUT_IN_SECONDS: אופציונלי. כמה שניות בקשה יכולה לפעול לפני שמוחזר חריג. הערך המקסימלי הוא 1,800 שניות. -
RESULT_VALUE: אופציונלי. שם המשתנה שבו מאוחסן התוצאה של שלב הפעלת HTTP.
גישה לנתוני תגובת HTTP שנשמרו במשתנה
אם הכותרת Content-Type של התגובה מציינת סוג מדיה application/json, תגובת ה-JSON שמאוחסנת במשתנה מומרת אוטומטית למפה שאפשר לגשת אליה.
במקרה הצורך, משנים את ה-API שמתבצעת אליו קריאה כדי לציין את סוג המדיה application/json בכותרת התגובה Content-Type. בכל מקרה אחר, אפשר להשתמש בפונקציות json.decode ו-text.encode כדי להמיר את גוף התגובה למפה. לדוגמה:
json.decode(text.encode(RESPONSE_FROM_API))
ב-Workflows יש כלי מובנה לניתוח נתונים שמאפשר גישה לנתונים האלה. כדי לגשת לשדות מתגובת ה-HTTP, משתמשים בתחביר הבא:
${VARIABLE_NAME.body|code|headers.PATH_TO_FIELD}מחליפים את מה שכתוב בשדות הבאים:
-
VARIABLE_NAME: השם של משתנה זרימת העבודה שבו שמרתם תגובת JSON. -
body: משתמשים בשדהbodyכדי לגשת לגוף של תגובת ה-HTTP. -
code: משתמשים בשדהcodeכדי לגשת לקוד התגובה של HTTP. -
headers: משתמשים בשדהheadersכדי לגשת לכותרות של תגובות ה-HTTP לפי שם. -
PATH_TO_FIELD: הנתיב לשדה בתגובת ה-JSON שרוצים לגשת אליו. יכול להיות שזה השם של השדה, או שאם השדה מוטמע באובייקט, הוא יכול להיות מהצורהobject1.object2.field.
לדוגמה, אם API מחזיר {"age":50} ותהליך עבודה מאחסן את התגובה הזו במשתנה שנקרא age_response, הדוגמה הבאה מחזירה את הערך של השדה age. במקרה הזה, 50:
age_response.body.age
דוגמאות
בדוגמאות האלה אפשר לראות את התחביר.
הקצאת התגובה מקריאה ל-API
אלא אם תזינו מונח חיפוש משלכם, הדוגמה הזו משתמשת במיקום Google Cloud שלכם כדי ליצור מונח חיפוש, שאותו היא מעבירה אל Wikipedia API. מוחזרת רשימה של מאמרי ויקיפדיה קשורים.
YAML
JSON
שליחת בקשת HTTP POST חיצונית
בדוגמה הזו מתבצעת בקשת POST לנקודת קצה חיצונית של HTTP.
YAML
JSON
ביצוע בקשת HTTP GET חיצונית עם כותרות
בדוגמה הזו מבוצעת בקשת GET עם כותרת מותאמת אישית. אפשר גם לספק הגדרות של כותרות בהתאמה אישית כששולחים סוגים אחרים של בקשות HTTP.
YAML
JSON
שימוש ב-OIDC לאימות כששולחים בקשה לפונקציות של Cloud Run
בדוגמה הזו מתבצעת בקשת HTTP באמצעות OIDC על ידי הוספת קטע auth לקטע args בהגדרת תהליך העבודה, אחרי שמציינים את כתובת ה-URL.
YAML
JSON
זיהוי וטיפול בשגיאות של בקשות HTTP
בדוגמה הזו מיושם handler מותאם אישית לחריגים שמבוסס על קוד סטטוס של HTTP שמוחזר על ידי בקשת GET. תהליך העבודה מזהה חריגה פוטנציאלית ומחזיר הודעת שגיאה מוגדרת מראש. אם לא מזוהה חריגה, הביצוע של תהליך העבודה נכשל והחריגה מוצגת כפי שהוחזרה על ידי בקשת ה-GET. למידע על תגי שגיאה אחרים, אפשר לעיין במאמר בנושא שגיאות בתהליך העבודה.