Logo GH

התאמת חוזה API

מדוע תאימות חוזה

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

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

מושגים בסיסיים

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

תאימות:
  • הספק החדש עובד עם צרכנים ותיקים.
  • קדימה: הספק הישן עובד עם צרכנים חדשים (בדרך כלל על ידי ”קוראים סובלניים”).
  • מלא: הן אחורה והן קדימה (האפשרות החזקה ביותר) נצפות.
  • תוספות - להוסיף אלמנטים אופציונליים בלי לשבור קיימים.

מדיניות Versioning

ורסיונינג סמנטי (מומלץ):
  • שינויים שבירת מייג 'ור (רק כאשר שורת API חדשה משתחררת: '/v2', 'שירות'. v2 '.
  • שינויים מינוריים ־ תוספים (שדות אופציונליים/שיטות חדשות). ‏
  • תיקון ללא שינוי בחוזה.
  • מדיניות דחייה: הכרזה על אלמנטים מיושנים, חלון תמיכה (שקיעה), אזהרות בכותרות/מטא-נתונים, תוכנית נסיגה.

בטוח נגד שינויים מסוכנים

מאובטח (בדרך כלל אחורה-תואם)

הוסף שדה אופציונלי ל JSON/Protobuf/Avro.
הוסף נקודת סוף חדשה/שיטה/אירוע.
הרחבת אנום עם ערכים חדשים אם הצרכנים סובלניים כלפי ערכים לא ידועים.
העלאת גבולות (לדוגמה, ”MaxPrits”) מבלי להדק את המינימום.
מוסיף נול עם ברירות מחדל נכונות.
ערוך תיאור/דוגמה לטקסט.

מסוכן (שובר תאימות)

שינוי שם/מחיקת שדות, שינוי סוג או חובה.
סטטוס קוד/שגיאה סמנטית משתנה (לדוגמה, היה '200', הפך '204 &pospos או' 404 ').
שינוי הפורמט של מזהים (UUID # int).
הידוק אימות (מינימומים/תבניות מחמירים יותר) ללא גירסה.
שינוי הסדר והמבנה בזרמים/אירועים gRPC.
השתמש מחדש במספרי תג בפרוטובוף עבור שדות חדשים.

אינטראקציה על ידי סגנון אינטראקציה

REST/HTTP + JSON Schema

תוספות: אנחנו מסמנים שדות חדשים כ ”אופציונליים ”/” בלתי ניתנים להשגה”.
קורא סובלני אצל הלקוח: התעלם משדות לא ידועים; לא להסתמך על סדר.
Versioning: major - בדרך ('/v2 ') או בסוג המדיה (' application/vnd. דוגמא. v2 + json '.
עבור עדכונים בטוחים ללא מירוצים.
שגיאות: פורמט יחיד ("סוג", "קוד", "שם", "פרט", "trace _ id'), לא משנים את הערך של" קוד "ללא מייג 'ור.
עבודת אלילים: המלצרים עדיפים על קיזוז; הוסף שדות ”הבא _ הסמן”, אל תשנה את המשמעות של אלה הקיימים.

gRPC/Protobuf

מספר התגים לא השתנה. אין אפשרות להשתמש מחדש בתוויות שנמחקו.
השדות החדשים הם 'אופציונליים '/' חוזרים' עם ברירות מחדל סבירות בשרת.
אל תשנה את הסדר והודעות החובה בזרימה-RPC.
סטטוסים של שגיאה הם יציבים (”INVALID _ ARGATION”, ”Afflied _ PRECONDITION” וכו '); סמנטיקה חדשה היא גרסה חדשה של השיטה/שירות.

מונע אירועים (קפקא/NATS/PULSAR) + Avro/JSON Schema

שמות אירועים: 'תחום. פעולה. וי מייג 'ור.
שדות חדשים הם אופציונליים; לבודד ליבה והעשרה (”enriched”).
סכימה נרשמת: כללי תאימות (BACWARD/FORWARD/FULL) בנושא/אירוע.
סיומת האנום תקפה לקורא סובלני בצד הצרכן.
החלוקה/סדר שינוי מפתח עבור צבירה = שבירת שינויים.

GraphQL

הוספת שדות/סוגים היא בטוחה; למחוק/לשנות שם - רק דרך @ disrated וחלון הנדידה.
אל תשנה סוגים/לא ניתנים לבחירה ללא מייג 'ור.
בקרת מורכבות/גבולות עומק הם חלק מהחוזה.

תבניות אבולוציה בת קיימא

התוסף-ראשון: להתרחב בלי לשבור.
משא ומתן יכולות: לקוחות מדווחים כי הם תומכים (כותרות/פרמטרים/הסכמים), השרת מתאם.
גבולות חוזה: תיקון MGC (חוזה אחריות מינימלית) והרחבות נפרדות (מודל פירמידה הפוך).
סובלנות כברירת מחדל: לקוחות מתעלמים מערכים לא נחוצים ומטפלים נכון בערכים לא ידועים (fallback).
דו ־ כתיבה/פולט כפול: עבור שינויים גדולים, שחררו את v1 ו ־ v2 במקביל לזמן מה.
כותרות שקיעה/אירועים: הודע מראש בעת הסרת הגרסאות.

ממשל ואוטומציה

צינורות API:
  • OpenAPI/Spectral: שמות, פגינציה, קודי שגיאה, תבניות שדה.
  • Buf/Protobuf: ביטול שימוש חוזר בתגים, סימון חבילות.
  • AsyncAPI/Schema Registry: סכימה ברמה CI.
  • קטלוג חוזה (SSOT): סכימה מרכזית/גירסה רשומה עם היסטוריה מפוזרת.
  • גילדה/ועדה שמאמצת כללים, תבניות ושינויי ביקורת.
  • ניהול שינוי: RFC/ADR, הערות שחרור, מדריכי נדידה.

בדיקת תאימות

Schema-diff in CI: בלוק שובר עוגות (OpenAPI-diff, Buf breaking, SR computability).
חוזים מונעים על ידי צרכנים (CDC): Pact/דומה - ספק נגד חוזים ספציפיים לצרכן.
דוגמאות זהב: שאילתות התייחסות/תגובות ואירועים לנסיגה.
E2E קנרית: מתגלגלת לנתח של קבוצות צרכני תנועה/יחידים.
כאוס/איחור: Timeout/Retray לבדוק - שינוי Latency-SLO נחשב שינוי חוזה.

נדידה ופחת

1. הכרז על הפחת: סמן את הפריט, ציין את מונח השקיעה וחלופי.
2. לשמור על תקופת תאימות: דו-כתיבה/פולט כפול, גשרים, מתאמים.
3. לאסוף טלמטריה: מי עוד משתמש הישן?
4. תקשורת: דואר, הערות שחרור, דוכני מבחן.
5. הסרה: לאחר שפג תוקפו של החלון - הסרה עם שחרור קבוע.

דוגמאות לשינויים

מנוחה

זה היה:
json
{ "id":"p1", "status":"authorized" }
הפך (תוסף, בטוח):
json
{ "id":"p1", "status":"authorized", "risk_score": 0. 12 }

לקוחות שמתעלמים משדות לא ידועים לא נשברים.

Protobuf

proto message Payment {
string id = 1;
string status = 2; // don't change tag numbers optional double risk_score = 3; // additive
}

אירוע

"פאיימנט. מורשה. v1 '(ליבה) +' תשלום. מועשר. v1 '(העשרה). צרכני נתיב קריטי קוראים את הליבה ואינם תלויים בהעשרה.

Antipatterns

סוואגר-לשטוף: יש באופן רשמי מפרט, אבל ההתנהגות של השירות הוא מסוכסך עם זה.
שבירה על ידי התגנבות: שינוי סוג/מצב/פורמט ללא גרסה חדשה וחלון נדידה.
אירועי CDC גולמי כחוזה ציבורי: דלף מזימות DB, בלתי אפשרי של אבולוציה.
לקוח קשיח: טיפות בשדות/ערכים לא ידועים; היעדר קורא סובלני.
שימוש מחדש בתגיות פרוטובוף: שחיתות נתונים שקטה.
Latency כ ”לא חוזה”: p95 התארך באופן בלתי צפוי - צרכנים מתפרקים בזמן.

רשימת תאימות (לפני המיזוג)

[ ] שינויים הם תוסף (או גרסה עיקרית).
[ ] המחאות לינטרס/דיף עברו, כללי התאימות ירוקים.
[ שגיאות/קודים/סטטוסים ] לא שינו את הסמנטיקה.
[ ] אנום הורחב מבלי לאסור ערכים ישנים; לקוחות - סובלניים.
[ ] הגבולות של MGC הם ללא שינוי.
[ ] דגימות מעודכנות/תיעוד/SDK.
[ ] למייג 'ור - כתיבה כפולה/תוכנית פלטה כפולה, שקיעה-תאריך, תקשורת-תכנית.
[ ] בדיקות CDC/Golden/E2E עברו.

FAQ

במה שונה התאימות לאחור מתאימות קדימה? ‏

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

מתי אתה עושה '/v2 '?
כאשר אינווריאנטים/סמנטיקה משתנים, שדות/שיטות נמחקים, נדרש מודל אבטחה חדש - קל יותר וישר יותר להתחיל קו חדש.

אתה יכול לחיות בלי סכימה רישום/לינטרס?
תיאורטית - כן, למעשה - אלה נסיגות תכופות והתמוטטויות ”נסתרות”. האוטומציה משתלמת.

ניתן להרחיב את אנום?
כן, אם הלקוחות מטפלים נכון בערכים לא ידועים (גיבוי/התעלמות). אחרת - גדול.

סך הכל

התאמת חוזה היא כללים + דיסציפלינה + אוטומציה. עיצוב תוסף, שינויים בשבירת גרסאות, הפעלת קורא סובלני, אוטומטית בדיקת דיפולס ו-CDC, תוכנית פחת. בדרך זו API יכול להתפתח במהירות ואינטגרציה יכולה להישאר יציבה.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

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