GraphQL ו־REST: השוואת צרכים, עלויות והרשאות

בקצרה

GraphQL מאפשר לבחור שדות מסכמה עם טיפוסים ויכול להשלים REST. אף גישה אינה מהירה או בטוחה יותר אוטומטית בכל עומס.

מסדרון שרתים ורשתות מאובטח ללא אנשים
במאמר זה

להבין את הבקשה ועלותה

הדוגמה משתמשת בסכמה בדויה: customer, orders ו־total צריכים להתקיים ב־API האמיתי. בקשה אחת יכולה ליצור מספר קריאות בשרת. גם REST יכול לספק תגובות מותאמות. נקודת HTTP אחת מקובלת ב־GraphQL, אך אינה חובה לכל ארכיטקטורה.

query RecentOrders($id: ID!) {
  customer(id: $id) {
    name
    orders(first: 5) {
      nodes { id total }
    }
  }
}

להשוות משימה מייצגת

  • מדדו בתים, השהיה, שגיאות ועבודת שרת לאותו מסך, אותן הרשאות ונפחים מציאותיים.
  • בדקו חלוקה לעמודים, קריאות מרוכזות לצמצום N+1, מטמון והפרדה בין חשבונות.
  • העריכו שינויי סכמה, תאימות ללקוחות ישנים ותפעול. שמירה על REST עשויה להיות פשוטה יותר.

לאכוף הרשאות ומגבלות עומס

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

מקורות ראשוניים

ניהול סכימת GraphQL ועלות השאילתה

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

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

מקור ראשוני: OWASP — GraphQL Cheat Sheet. שיטה קשורה: קריאת המדריך המעשי.

ETag, מטמון HTTP ועדכונים מקבילים

הערות המקורות המפורטות זמינות באנגלית במהדורה זו.

REST and GraphQL: separate representation and authorisation

An HTTP ETag applies to a selected representation. It is neither permission for every returned object nor a universal consistency contract for GraphQL entities.

  • Define which response variants have their own validators.
  • Test object and field access independently from HTTP conditions.
  • Do not automatically apply the PUT scenario to a GraphQL mutation; specify its concurrency contract.

Explore ETag comparisons and the simulator →

References reviewed · RFC 9110 · §13 · RFC 9111 · RFC 6585 · §3