שימוש ב-GraphQL

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

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

The GraphQL policy parses GraphQL payloads into message flow variables, verifies GraphQL requests against a schema, or both.

Use the GraphQL policy to:

  • Ensure that your APIs only process requests that conform to the schema you provide.
  • Impose restrictions on the payload by setting a maximum on the number of fragments allowed.
  • Associate GraphQL with API products.
  • Leverage the Oauth2, VerifyAPIKey, and Quota policy features, just as in REST.

GraphQL supports the following types of payloads:

  • POST of graphQL payloads with Content-Type : application/graphql
  • POST of graphQL payloads with Content-Type: applcation/json
  • GET of graphQL payloads where the payload is a query parameter

סיכום מהיר של האפשרויות למדיניות 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 באופן הבא:

  1. בממשק המשתמש של Apigee, עוברים לדף Proxy development > API Proxies.

    מעבר אל API Proxies

  2. ברשימת ה-proxies, בוחרים את ה-proxy ל-API שרוצים להשתמש במדיניות GraphQL לגביו.
  3. לוחצים על הכרטיסייה פיתוח.
  4. בחלונית הימנית, לוחצים על הלחצן + לצד התיקייה מדיניות.
  5. בתיבת הדו-שיח Create policy (יצירת מדיניות), לוחצים על השדה Select policy type (בחירת סוג המדיניות), גוללים למטה אל Mediation (גישור) ובוחרים באפשרות GraphQL.

    תיבת הדו-שיח ליצירת מדיניות ב-GraphQL.

    מזינים שם לתצוגה ושם.

    לאחר מכן בוחרים קובץ סכימת GraphQL באופן הבא:

    1. לוחצים על השדה קובץ סכימה. יוצגו האפשרויות הבאות:
      • ללא סכימה. אם תבחרו באפשרות הזו, Apigee לא ישתמש בסכימה כדי לאמת בקשות.
      • ייבוא סכימת GraphQL‏ (‎.graphql)
    2. בוחרים באפשרות ייבוא סכימת GraphQL‏ (‎.graphql). מוצגות האפשרויות הבאות:

      בוחרים קובץ סכימה.
    3. לוחצים על בחירת קובץ ובוחרים את קובץ הסכימה שיצרתם קודם (שחייבת להיות לו הסיומת .graphql). הקובץ מופיע בשדה שם הסכימה.

      הסכימה נבחרה.
  6. לוחצים על יצירה כדי ליצור את המדיניות.

אחרי שיצרתם את מדיניות GraphQL, אתם יכולים לצרף אותה לשלב ב-PreFlow:

  1. בחלונית הימנית, בוחרים באפשרות Proxy Endpoints > default > PreFlow:

    בוחרים נקודות קצה של יעד ל-PreFlow בסייר ה-Proxy.

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

    לוחצים על הלחצן + לצד PreFlow בחלונית Response.

  3. בתיבת הדו-שיח Add policy step (הוספת שלב מדיניות), בוחרים במדיניות GQL-.
  4. לוחצים על הוספה כדי לצרף את המדיניות.
  5. לוחצים על שמירה כדי לשמור את השינויים בגרסה הנוכחית.
  6. כדי לפרוס את השינויים, לוחצים על הכרטיסייה סקירה כללית ובוחרים באפשרות פריסה.

אפשרויות ההגדרה של מדיניות 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 לפעולת REST‏ GET.
    • mutation: הגרסה המקבילה של GraphQL לפעולת REST‏ PUT.
    • query_mutation: גם query וגם mutation.
  • MaxDepth: העומק המקסימלי של השאילתה, כשהיא מיוצגת כעץ. ‫MaxDepth מאפשרת לחסום שאילתות עומק במטען הייעודי (payload), כך ש-Apigee לא צריך ליצור משתני זרימה גדולים מאוד כדי להכיל את הערכים. עם זאת, מטען הייעודי (payload) נשלח כמו שהוא, בלי קשר לערך של MaxDepth.
  • MaxCount: המספר המקסימלי של פרגמנטים שיכולים להיות במטען הייעודי. אפשר להשתמש בזה כדי למנוע משרת ה-GraphQL back-end של הלקוח להריץ שאילתות מורכבות מאוד, וכך לאלץ את הלקוחות לפצל את הלוגיקה שלהם למטען קטן יותר.
  • Action: אחת מפעולות ה-GraphQL הבאות:
    • parseApigee מנתח את מטען ה-GraphQL וממיר אותו למשתני זרימה. לאחר מכן אפשר להשתמש בתוכן של משתני הזרימה במדיניות כמו JavaCallout. שימו לב ש-parse גם מאמת את מטען המידע.
    • verify: Apigee מוודא שמטען ה-GraphQL תואם לסכימה שהועלתה ל-proxy. אפשר להשתמש ב-verify כדי לוודא שלא מתקבלות בקשות שלא תואמות לסכימה. כך אפשר לחסוך זמן יקר של מעבד בקצה העורפי.
    • parse_verify: ניתוח המטען הייעודי (payload) ואימות שלו.
  • ResourceURL: הנתיב לקובץ סכימת GraphQL שמשמש את Apigee לאימות בקשת GraphQL.

מידע נוסף על האפשרויות האלה