שאילתות קבועות של GraphQL: מהירות ואבטחה ל-API שלך

יישומי לקוח שולחים לעיתים קרובות שאילתות GraphQL כבדות שמאטות את הטעינה ומגדילות את התעבורה. אנו מיישמים Persisted Queries, ומחליפים את גוף השאילתה המלא ב-hash קומפקטי, מה שמאיץ את ה-API ומשפר את האבטחה. הצוות שלנו מספק פתרון turnkey—מהגדרת הפרוטוקול ועד אינטגרציית CDN—ומבטיח פעילות אמינה ותמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
שאילתות קבועות של GraphQL: מהירות ואבטחה ל-API שלך
בינוני
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

GraphQL Persisted Queries: האצת ה-API שלך בסדר גודל

לעתים קרובות אנו נתקלים במצב: אפליקציית לקוח שולחת שאילתות GraphQL ענקיות (לדוגמה, query { user { posts { comments { author { ... } } } } }) במשקל 10–15 KB. ברשתות סלולריות, זה גורם ל-TTFB של 3–5 שניות. Persisted Queries פותרות זאת באופן קיצוני: במקום גוף השאילתה המלא, הלקוח שולח רק hash מסוג SHA256 (44 בתים). השרת (או ה-CDN) מחזיר תגובה שמורה במטמון. זה מפחית את התעבורה ב-60% ומאפשר מטמון ברמת HTTP. לפי Apollo, APQ הפחית את גודל הבקשה פי 20 עבור קריאות חוזרות.

הניסיון שלנו: במהלך השנים האחרונות יישמנו טכניקה זו ביותר מ-30 פרויקטים. במקרה אחד (אתר מסחר אלקטרוני עם מיליון מוצרים), APQ הפחית את גודל הבקשה מ-8 KB ל-400 בתים, ו-LCP ירד מ-3.2 שניות ל-1.1 שניות. אנו מבטיחים יישום נקי ללא פשרות אבטחה.

כיצד פועלות Automatic Persisted Queries (APQ)

APQ הוא פרוטוקול דו-שלבי. הלקוח שולח תחילה בקשת POST עם ה-hash בלבד. אם מטמון השרת אינו מכיל את השאילתה, הוא מחזיר 404. לאחר מכן הלקוח שולח שוב עם גוף השאילתה המלא. השרת שומר את צמד ה-hash→שאילתה ומחזיר נתונים. כל הקריאות הבאות הן רק ה-hash, וניתן לעבור לבקשות GET שנשמרות במטמון ב-CDN.

Клиент Сервер CDN/Cache
│ │ │ │
POST {hash} │ │ │
───────────────>│ │ │
404 Not Found │ │ │
<───────────────│ │ │
│ │ │ │
POST {hash + query body} │ │
───────────────>│ │ │
{data} [сохранить hash→query] │ │
<───────────────│ │ │
│ │ │ │
GET ?hash=... │ │ │
──────────────────────────────> │
{data} из кеша │ │
<────────────────────────────── │

השוואה: APQ לעומת Registered PQ לעומת ללא PQ

קריטריון ללא Persisted Queries APQ Registered PQ
גודל בקשה מלא (עד 15 KB) Hash (44 בתים) + מדי פעם מלא רק hash
מטמון CDN רק אם idempotent בקשות GET נשמרות במטמון בקשות GET נשמרות במטמון
אבטחה כל שאילתה כל שאילתה לאחר רישום רק שאילתות רשומות
מאמץ יישום — נמוך (1–2 ימים) בינוני (3–5 ימים)

אופטימיזציה של שאילתות GraphQL עם Persisted Queries משפרת את ביצועי ה-API ומשפרת את Core Web Vitals.

הזמינו יישום Persisted Queries — נראה לכם מדדים לפני ואחרי על סביבת בדיקה.

למה להשתמש ב-Registered Persisted Queries?

Registered Persisted Queries (RPQ) הם APQ + רשימת היתרים. בסביבת ייצור, רק שאילתות שה-hash שלהן מופיע במניפסט מותרות. זה מונע התקפות דרך Клиент Сервер CDN/Cache │ │ │ │ POST {hash} │ │ │───────────────>│ │ │ 404 Not Found │ │ │<───────────────│ │ │ │ │ │ POST {hash + query body} │ │───────────────>│ │ │ {data} [сохранить hash→query] │ │<───────────────│ │ │ │ │ │ GET ?hash=... │ │ │──────────────────────────────> │ │ {data} из кеша │ │<────────────────────────────── │ או מוטציות שרירותיות. המניפסט נוצר מקוד הלקוח בזמן בנייה.

# Генерация манифеста из клиентских операций
npx generate-persisted-query-manifest \
  --documents "src/**/*.graphql" \
  --output persisted-query-manifest.json
// persisted-query-manifest.json (фрагмент)
{
  "format": "apollo-persisted-query-manifest",
  "version": 1,
  "operations": [
    {
      "id": "dc67510fb4289672bea757e862d6b00e...",
      "name": "GetPosts",
      "type": "query",
      "body": "query GetPosts($limit: Int) { posts(first: $limit) { ... } }"
    }
  ]
}

בשרת, אתה רק צריך middleware שמחליף את גוף השאילתה מהמניפסט ודוחה hashes לא ידועים.

מקרה אמיתי: RPQ עבור אפליקציית פינטק בפרויקט עם דרישות אבטחה גבוהות (עיבוד תשלומים), יישמנו RPQ. יצרנו מניפסט של 120 פעולות והגדרנו בקרה קפדנית. התוצאה: אפס תקלות בשישה חודשים, TTFB ירד ב-40% הודות למטמון GET ב-Cloudflare. חיסכון בעלויות תשתית הסתכם ב-30%.

בעיות נפוצות והפתרונות שלהן

בעיה פתרון
מטמון מיושן בעת שינוי סכמה השתמש ב-Redis עם TTL של 24 שעות ובטל לפי גרסת סכמה
חוסר תמיכה ב-APQ בספרייה יישם middleware: בדוק JSON נכנס עבור __schema
יצירת מניפסט איטית ב-CI בנייה מצטברת: שמור מניפסט קודם ועדכן רק קבצים ששונו

כיצד אנו מיישמים Persisted Queries: שלב אחר שלב

  1. ביקורת על ה-GraphQL API הנוכחי: נתח גדלי בקשות, תדירות כפילויות, מטמון קיים.
  2. תכנון: בחר גישה (APQ או RPQ), הגדר TTL, הגדר Redis למטמון מבוזר.
  3. יישום לקוח: שלב # Генерация манифеста из клиентских операций npx generate-persisted-query-manifest \ --documents "src/**/*.graphql" \ --output persisted-query-manifest.json ב-Apollo Client או מקביל עבור Relay/Urql.
  4. יישום שרת: הפעל APQ (מובנה ב-Apollo Server), הגדר מטמון, הוסף middleware עבור RPQ אם נדרש.
  5. בדיקות: ודא נכונות מטמון, עקוב אחר שיעורי פגיעה.
  6. פריסה ו-CDN: הגדר Nginx למטמון GET, הפעל Cloudflare או Vercel Edge.

מה כלול

  • תיעוד של סכמה ומניפסט.
  • הגדרת ניטור מטמון (Prometheus/Grafana).
  • הדרכת צוות על תחזוקה ועדכוני מניפסט.
  • תמיכה לאחר שחרור למשך שבועיים.
  • העברת מאגר קוד ותיעוד.

אנו משתמשים בתצורות מוכחות. דוגמת הגדרת Nginx:

proxy_cache_path /var/cache/nginx/graphql levels=1:2 keys_zone=graphql:10m max_size=100m inactive=1h use_temp_path=off;
location /graphql {
  if ($request_method = GET) {
    proxy_cache graphql;
    proxy_cache_key "$uri$is_args$args";
    proxy_cache_valid 200 5m;
    proxy_cache_use_stale error timeout updating;
    add_header X-Cache-Status $upstream_cache_status;
  }
  proxy_pass http://api_backend;
}

ציר זמן ועלות

הגדרת APQ בסיסית עם Redis ו-CDN — 1 עד 2 ימי עסקים. מחזור מלא עם Registered Persisted Queries, מניפסט וניטור — 3 עד 5 ימים. העלות מחושבת באופן אישי לפי מורכבות הסכמה ומספר הלקוחות.

האץ את ה-GraphQL API שלך — צור קשר להערכת פרויקט. נראה לך מדדים לפני ואחרי על סביבת בדיקה.