GH GambleHub

התאמת API ותאימות חוזה

TL; DR

תאימות היא משמעת, לא מזל. לשמור על מדיניות גירסה ברורה (SemVer), לשנות מתמטיקה (מה ”שובר”, מה שלא), מבחני חוזה, סכימות, ונהלי שקיעה. עבור כסף ותאימות - REST/gRPC קפדנית עם vN, עבור אגרגציות UI - GraphQL אבולוציונית עם '@ disured'. תמיד: תנועה כנרית, תאימות לאחור, מחזור שחרור אחד, מדריכי נדידה, טלמטריה בשטח.

1) מושגים ומטרות בסיסיים

התאמה לאחור (BC): לקוחות ישנים מתאימים לשרת החדש.
FFC: לקוחות חדשים מתאימים לשרת הישן (מוגבל).
תאימות חוט: הפורמט על התייל אינו נשבר (חשוב במיוחד עבור gRPC/Protobuf).
סימוור: "מייג 'ור. מינורי. Patch '- לשבור את החוזה = להעלות מייג' ור.

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

2) שינוי מטריקס: מה שאתה יכול ולא יכול

סוג השינוימנוחהGRPC (פרוטובוף)GraphQL
הוסף שדה (תגובה)+ בטוח+ בטוח (מספר שדה חדש)+ בטוח
הוספת שדה אופציונלי (בקשה)אם השרת סובל היעדרות של+ בטוח+ בטוח
מחק שדהשבירה -- אם תשתמש שוב במספר -after '@ decreted' lick למחוק אחרי החלון
שינוי שם שדהשבירה -- (שינוי שם, לשמור מספר)כינוי/שני שדות זמן
שינוי סוג/תבניתשבירה -- בשינוי סוג חוט --אם שובר את המעגל
שינוי סמנטיקה סטטוס/שגיאהשבירה -קודים/חלקים - חוזה- שוברים לקוחות
שינוי סדר באנוםערכי הוא בטוחאם מספרי אנום יציבים+ בשם בטוח
נקודת סוף/שיטות חדשות+ בטוח+ בטוח+ בטוח
שינוי סגידה/מסנניםבזהירות, להוסיף אפשרויות+ באמצעות שדות חדשים+ באמצעות ויכוחים חדשים

3) מדיניות לסגנונות API שונים

3. 1 מנוחה

גרסה ב ־ URI ("/v1/... ) או תחום ('api-v1. '). גרסת כותרת למקרים פנימיים בלבד.
הוסף, אל תמחק: שדות חדשים - אוקי, סימן ישן כ ”מנותק” בתרשים ועזוב לפחות למחזור אחד.
סטטוסים/שגיאות: אל תשנו את הקודים והמבנה. קוד/שגיאה. הודעה/טעות. פרטים ".
אידמפוטנטיות אינה משתנה: אל תהפוך ”פוסט” מאובטח עם ”מפתח אידמפוטנטי” לאתגר ”שונה מבחינה התנהגותית”.

3. 2 GRPC/Protobuf

מספרי שדה הם קדושים: אל תשתמש שוב במספרים שנמחקו, סמן כ ”שמורים”.
רק הוספת שדות אופציונליים/רפיט חדשים; "חובה קשה" - באמצעות אימות, לא מחדש ".
חבילות גרסה: 'תשלומים. v1 ',' תשלומים. v2 '.
תאימות שירות: RPCs חדשים * שיטה חדשה; אנחנו לא משנים את ההתנהגות של הישן.

proto message Payout {
reserved 4 ;//field deleted, number reserved string id = 1;
string currency = 2;
int64 amount_minor = 3;
// v2: optional string comment = 5;
}

3. 3 GraphQL

אבולוציה ללא v2: הוספת שדות/סוגים; מחיקה - דרך '@ decreted (סיבה) "עם ההכרזה של החלון.
שאילתות מתמידות: ללקוחות ציבוריים, להשתמש בלבן של שאילתות - קל יותר לשלוט בתאימות.
שטח ברמת AuthZ וטלמטריה: יודעים אילו שדות משמשים למעשה לפני מחיקה.

graphql type Payout {
id: ID!
amountMinor: Long!
currency: String!
comment: String @deprecated(reason: "Use note")
note: String
}

3. 4 חוברות אינטרנט

גרסה במסלול ('/webhooks/v1/piples ') ומעטפת אירוע קבועה (' event _ id', 'type', 'ts',' data ').
שמור חתימות/NMAS ללא שינוי; אלגוריתמים חדשים כאפשרות עם דגל.
הרחבות - רק דרך הנתונים של השדות החדשים. ובלי למחוק את הישנים.

4) שער API וניתוב גרסה

ניתוב מבוסס חוקים: על ידי קידומת '/v1 ', על ידי כותרת' X-Api-Version ', על ידי תחום.
Shadow/Canary: לשקף חלק מתנועת הייצור בגרסה החדשה ”אל הצללים”, להשוות את התשובות.
Rate/Quotas לכל גרסה: מגן על לקוחות מבוגרים במהלך הגירה.

כותרות שקיעה למנוחה:
  • שקיעה: - תאריך כיבוי גרסה
  • הפחתה: נכון - הגרסה הופכת למיושנת
  • קישור: rel = ”ירידה” - על changelog/nigering המדריך
דוגמה (בסגנון נגינקס, מפושט):
nginx location ~ ^/v2/ {
proxy_pass http://api_v2;
}
location ~ ^/v1/ {
add_header Deprecation "true";
add_header Sunset "Thu, 01 May 2026 00:00:00 GMT";
proxy_pass http://api_v1;
}

5) רישומי מזימות וחוזים

סכימת OpenAPI/JSON (ראשי תיבות של OpenAPI/JSON Schem תיאורי פרוטובוף (Protobuf): רישום SDL ל ־ GraphQL.
בדיקת CI: לינטרים + ”בדיקת שבירת שינויים” ביחסי ציבור.
חוזים המונעים על ידי צרכנים (CDC): בדיקות צרכניות (Pact/analog) - הגנה מפני הפסקות לא בולטות.
Changelog: ניתן לקריאה במכונה (לדוגמה, Changelog. md' + לשחרר הערות ברישום).

6) התפתחות שדות: כללי אגודל

אל תשנה את הפורמט (UUID↔int) ללא שדה חדש '_ v2' ותקופת מעבר.
זמן/מטבע: שמור על ISO-8601/epoch UTC ומטבע amount_minor +; אין קנה מידה (אגורות/סנט).
Enum: הוסף ערכים - בסדר; אל תשנה את המשמעות של הישנים. עבור REST, תן ערכים מחרוזת, לא קלט.
Pagination: מבוסס סמן יציב יותר; אל תשנה את הסמנטיקה של הסמן.

7) הידלדלות ונוהל ”שקיעה”

1. הודעה (T-90/60): changelog, דואר לשותפים, 'Desprection/Sunset' כותרות.
2. זמן שכפול: V1 ו-V2 פועלים במקביל; V1 מצויד באזהרות בתגובות/יומנים.
3. טלמטריה שימוש: מי עוד קורא V1? אנשי קשר נקודתיים.
4. מקפיא V1: רק תיקוני באגים/אין תכונה.
5. Sunset-410 נעלם או עמוד בלוק הוראות נדידה.

8) שחרור ללא כאב: הנחת אסטרטגיות

ניתוב כחול/ירוק או משוקלל: 1-5-25-50-100% תנועה.
חלון תאימות: לפחות 1-2 שחרור מינורי, לעתים קרובות יותר 6-12 חודשים עבור API חיצוני.
מאפיין דגלים לכלול שדות לוגיקה/סניפים חדשים ללא שדרוג.
קריאה/כתיבה-פיצול: קודם הוסף תמיכה לקריאת שדה חדש, ואז תתחיל לכתוב אותו.

9) בדיקת יכולת בין-אופרטיבית (סוויטת אימון)

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

10) מדדים ו ־ SLOs של תהליך הווסינינג

% מהלקוחות ב-MINOR האחרון (80% לפני שקיעה).
שגיאות תאימות/לא זמינות לכל שחרור (מטרה 0).
שיתוף קריאות מורשת (ירידה לשקיעה).
זמן נדידת הלקוח (median/p95).
דלתא Latency/regression delta בין גרסאות (לא יותר גרוע מבסיסי).

11) דוגמאות של חפצים

OpenAPI (מקטע, depriction שדה):
yaml components:
schemas:
Payout:
type: object properties:
id: { type: string, format: uuid }
amount_minor: { type: integer }
currency: { type: string }
comment:
type: string deprecated: true description: "Use note"
note: { type: string }
פרוטובוף (שמור ו-V2 packet):
proto syntax = "proto3";
package payouts. v1;
message Payout { reserved 5; string id=1; int64 amount_minor=2; string currency=3; }
GraphQL (ריקון):
graphql type Query { payout(id: ID!): Payout }

12) ורסינציה של ערוצים סמוכים

SDK/CLI: תלות בגרסת SEMVER + API, תאימות שנקבעה ב ־ README.
אירועים/זרמים (WS/Kafka): גרסה באנבלופה. גרסה "; תכונות חדשות - אופציונליות; דדופ וקורות חיים עובדים אותו הדבר בין הגרסאות.
דיווח/CSV: גרסה בשם קובץ/כותרת; הוספת עמודות ימינה לא משנה את הסדר/סוגים.

13) ממשל ותפקידים

בעל חוזה (בעל דומיין), Steward API (חוקים וקווים), מנהל שחרור (Sunset/Communications).
תהליך שבירת שינויים: הצדקה עסקית, תוכנית הגירה, חפצים, תאריכים.
ספריית API מאוחדת: שם ניתן לראות דיאגרמות, גרסאות, לוח שנה של שקיעה, מגע.

14) אנטי דפוסים

הפסקות ”שקט”: לשנות את מצב/שגיאה/סוג שדה ללא גרסה.
שימוש חוזר במספרי פרוטובוף הורס שידור חוזר ולקוחות ישנים.
GraphQL ללא טלמטריה שדה - הסרת מגע.
Global v2 בסך הכל - megamigration במקום אבולוציה נקודתית.
הגרסה בפרמטר השאילתות של API הציבורי היא תוכנית לא ברורה ופגיעה.
אין מדריכי נדידה ודוגמאות - שותפים דוכן, מועדים משובשים.

15) בדיקת-רשימה של הגרסה החדשה

[ סכימת ] מעודכנת (OpenAPI/Protobuf/SDL), תיקונים ובדיקות שבירה עברו.
[ ] אינטגרציה ובדיקות חוזה (CDC).
[ ] SDK/דגימת קוד/מדריך הגירה ו Changelog מוכן.
[ ] Deprecation/Sunset מאופשר (גרסה ישנה) + כיצד להגר דף.
[ ] קנרית/צל תוכנית, התראות ולוחות מחוונים להשוואת מדדים.
[ ] התאימות לאחור נשמרת לתקופה מוסכמת.
[ ] תוכנית Rollback ומטריצת סיכון הסכימו.

תקציר

API יציב הוא תהליך, לא "אחת ולתמיד. "לחיות לפי הכללים: SemVer + avolution + complose evolution + circuit protection + Sunset process. סגנונות נפרדים (REST/gRPC/GraphQL) ומדיניותם, גרסאות מסלול ל-API של השער, גלגול קנריות, מדידת האפקט. כך תימנעו מ ”שבירת הפתעות”, להאיץ את שילוב השותפים ולשמור על יכולת חיזוי לתחומים כספיים וקריטיים.

Contact

צרו קשר

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

Telegram
@Gamble_GC
התחלת אינטגרציה

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

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

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