הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
מדיניות GraphQL יכולה לנתח את מטען הייעוד של בקשות GraphQL למשתני זרימת הודעות, לאמת את הבקשה מול סכימת GraphQL או לבצע את שתי הפעולות.
מדיניות GraphQL מנתחת את נתוני ה-payload של GraphQL למשתנים של זרימת ההודעות, מאמתת בקשות GraphQL מול סכימה או עושה את שניהם.
אפשר להשתמש במדיניות GraphQL כדי:
- מוודאים שממשקי ה-API מעבדים רק בקשות שתואמות לסכימה שסיפקתם.
- אפשר להגביל את מטען הנתונים על ידי הגדרת מספר מקסימלי של פרגמנטים שמותרים.
- משייכים GraphQL למוצרי API.
- להשתמש בתכונות של מדיניות Oauth2, VerifyAPIKey ו-Quota, בדיוק כמו ב-REST.
GraphQL תומך בסוגי מטען הייעודי הבאים:
- פרסום של מטען ייעודי (payload) של GraphQL עם
Content-Type : application/graphql - פרסום של מטען ייעודי (payload) של GraphQL עם
Content-Type: applcation/json - GET של מטען ייעודי (payload) של GraphQL שבו המטען הייעודי הוא פרמטר של שאילתה
סיכום מהיר של האפשרויות למדיניות GraphQL מופיע בקטע אפשרויות GraphQL בהמשך.
מידע נוסף על GraphQL זמין באתר GraphQL.org.
דוגמה
בדוגמה הבאה מוצג איך מעלים סכימת GraphQL ל-Apigee ומשתמשים בה כדי לאמת בקשות עם תוכן GraphQL.
יצירת קובץ סכימה
כדי להריץ את הדוגמה, קודם יוצרים קובץ סכימת GraphQL עם התוכן הבא:
type Query {
allPersons(last: Int): [Person!]!
}
type Mutation {
createPerson(name: String!, age: Int!): Person!
}
type Subscription {
newPerson: Person!
}
type Person {
name: String!
sex: String!
age: Int!
posts: [Post!]!
}
type Post {
title: String!
author: Person!
}שומרים את הקובץ בשם הרצוי, ואחריו מוסיפים את הסיומת .graphql.
הוספת מדיניות GraphQL בממשק המשתמש של Apigee
קודם יוצרים את מדיניות GraphQL באופן הבא:
-
בממשק המשתמש של Apigee, עוברים לדף Proxy development > API Proxies.
- ברשימת ה-proxies, בוחרים את ה-proxy ל-API שרוצים להשתמש בו במדיניות GraphQL.
- לוחצים על הכרטיסייה פיתוח.
- בחלונית הימנית, לוחצים על הלחצן + לצד התיקייה מדיניות.
בתיבת הדו-שיח Create policy (יצירת מדיניות), לוחצים על השדה Select policy type (בחירת סוג המדיניות), גוללים למטה אל Mediation (גישור) ובוחרים באפשרות GraphQL.

מזינים שם לתצוגה ושם.
לאחר מכן, בוחרים קובץ סכימת GraphQL באופן הבא:
- לוחצים על השדה קובץ סכימה. יוצגו האפשרויות הבאות:
- ללא סכימה. אם תבחרו באפשרות הזו, Apigee לא ישתמש בסכימה כדי לאמת בקשות.
- ייבוא סכימת GraphQL (.graphql)
בוחרים באפשרות ייבוא סכימת GraphQL (.graphql). יוצגו הפרטים הבאים:
לוחצים על בחירת קובץ ובוחרים את קובץ הסכימה שיצרתם קודם (שחייבת להיות לו הסיומת
.graphql). הקובץ מופיע בשדה שם הסכימה.
- לוחצים על השדה קובץ סכימה. יוצגו האפשרויות הבאות:
- לוחצים על יצירה כדי ליצור את המדיניות.
אחרי שיצרתם את מדיניות GraphQL, אתם יכולים לצרף אותה לשלב ב-PreFlow:
- בחלונית הימנית, בוחרים באפשרות Proxy Endpoints > default > PreFlow:

- לוחצים על הלחצן + לצד PreFlow בחלונית Response בפינה השמאלית התחתונה של הכלי לעריכה חזותית:

- בתיבת הדו-שיח Add policy step (הוספת שלב מדיניות), בוחרים את מדיניות GQL-.
- לוחצים על הוספה כדי לצרף את המדיניות.
- לוחצים על שמירה כדי לשמור את השינויים בגרסה הנוכחית.
- כדי לפרוס את השינויים, לוחצים על הכרטיסייה סקירה כללית ובוחרים באפשרות פריסה.
אפשרויות ההגדרה של מדיניות GraphQL מפורטות בקטע אפשרויות GraphQL שבהמשך.
עכשיו אפשר לבדוק את מדיניות GraphQL באמצעות הפקודה הבאה של curl:
curl --location --request POST 'https://PROXY_BASEPATH/HOST_NAME' --data-raw 'query query_name {allPersons {name}}' -kכאשר PROXY_BASEPATH הוא נתיב הבסיס של ה-proxy ו-HOST_NAME הוא שם ה-proxy, כולל מספר הגרסה האחרונה. כשמריצים את הפקודה, Apigee מאמת את הבקשה מול הסכימה ומחזיר את הפלט הבא.
{
"query query_name {allPersons {name}}": "",
"id": 101
}דוגמה נוספת לבקשה:
curl --location --request POST 'https://PROXY_BASEPATH/HOST_NAME' --data-raw 'query ilovegql {DEADBEEF}' -kהפעם אימות הבקשה נכשל ומופיעה הודעת השגיאה הבאה.
{"fault":{"faultstring":"steps.graphQL.SchemaValidationFailed","detail":{"errorcode":"steps.graphQL.SchemaValidationFailed"}}}אפשרויות GraphQL
אלה האפשרויות של GraphPolicy:
-
OperationType: סוג הפעולה. האפשרויות הן:-
query: הגרסה המקבילה של GraphQL לפעולת RESTGET. -
mutation: הגרסה המקבילה של GraphQL לפעולת RESTPUT. -
query_mutation: גםqueryוגםmutation.
-
-
MaxDepth: העומק המקסימלי של השאילתה, כשהיא מיוצגת כעץ. MaxDepthמאפשר לחסום שאילתות עומק במטען הייעודי (payload), כך ש-Apigee לא צריך ליצור משתני זרימה גדולים מאוד כדי להכיל את הערכים. עם זאת, מטען הייעודי (payload) נשלח כמו שהוא, בלי קשר לערך שלMaxDepth. -
MaxCount: המספר המקסימלי של פרגמנטים שיכולים להיות במטען הייעודי. אפשר להשתמש בזה כדי למנוע משרת ה-backend של GraphQL של הלקוח להריץ שאילתות מורכבות מאוד, וכך לאלץ את הלקוחות לפצל את הלוגיקה שלהם למטען קטן יותר. -
Action: אחת מפעולות ה-GraphQL הבאות:-
parseApigee מנתח את מטען ה-GraphQL הייעודי למשתני התהליך. You can then use the contents of the flow variables in policies such as JavaCallout. שימו לב ש-parseמאמת גם את מטען הנתונים. -
verify: Apigee מוודא שמטען ה-GraphQL תואם לסכימה שהועלתה לשרת ה-proxy. אתם יכולים להשתמש ב-verifyכדי לוודא שלא תקבלו בקשות שלא תואמות לסכימה שלכם. כך אפשר לחסוך זמן יקר של מעבד בקצה העורפי. -
parse_verify: ניתוח המטען הייעודי (payload) ואימות שלו.
-
-
ResourceURL: הנתיב לקובץ סכימת GraphQL שמשמש את Apigee לאימות בקשת GraphQL.