GH GambleHub

API ვერსიები და კონტრაქტის თავსებადობა

TL; DR

თავსებადობა არის დისციპლინა და არა იღბალი. შეინარჩუნეთ ვერსიების მკაფიო პოლიტიკა (SemVer), ცვლილებების მათემატიკა (რაც „არღვევს“, რა არა), ხელშეკრულების ტესტები, სქემების რეესტრები და Sunset პროცედურები. ფულისა და შესაბამისობისთვის - მკაცრი REST/gRPC vN- ით, UI- სთვის - ევოლუციური GraphQL '@ deprecated'. ყოველთვის: კანარის ტრაფიკი, საპირისპირო თავსებადობა - ერთი გამოშვებული ციკლი, მიგრაციის ჰაიდები, მინდვრების გამოყენების ტელემეტრია.

1) ძირითადი ცნებები და მიზნები

Backwards-compatible (BC): ძველი მომხმარებლები შესაფერისია ახალი სერვერისთვის.
Forwards-Compatible (FC): ახალი მომხმარებლები (შეზღუდულია) შესაფერისია ძველი სერვერისთვის.
Wire თავსებადობა: „მავთულზე“ ფორმატი არ იშლება (განსაკუთრებით მნიშვნელოვანია GRPC/Protobuf- ისთვის).
SemVer: `MAJOR. MINOR. PATCH '- დაარღვიეთ კონტრაქტი და გაზარდეთ MAJOR.

მიზანი: დამანგრეველი ცვლილებების შემცირება და პროგნოზირებადი მიგრაციის ფანჯრების უზრუნველყოფა.

2) ცვლილებების მატრიცა: რა არის შესაძლებელი და რა - არა

ცვლილების ტიპიRESTgRPC (Protobuf)GraphQL
ველის დამატება+ უსაფრთხოდ+ უსაფრთხოდ (ახალი ველი number)+ უსაფრთხოდ
არჩევითი ველის დამატება• თუ სერვერი არარსებობას განიცდის+ უსაფრთხოდ+ უსაფრთხოდ
ველის წაშლა- გატეხილიაკჲ თჱოჲლჱგარვ ნჲმვპ,'@ deprecated' - ის მეშვეობით ფანჯრის ამოღება
მინდვრის გადარქმევა- გატეხილი- (შეცვალეთ სახელი, შეინახეთ ნომერი)alias/ორი ველი დროულად
ტიპის/ფორმატის შეცვლა- გატეხილი- wire ტიპის შეცვლისას- თუ სქემა გატეხილია
სტატუსის/შეცდომების სემანტიკის შეცვლა- გატეხილი- კოდები/დეტალები - კონტრაქტი- კლიენტებს არღვევს
წესრიგის შეცვლა Enum- შიუსაფრთხოა, რომ მნიშვნელოვნება იყოს უსაფრთხოთუ enum რიცხვები სტაბილურია+ სახელი უსაფრთხოა
ახალი endpoint/მეთოდები+ უსაფრთხოდ+ უსაფრთხოდ+ უსაფრთხოდ
პაგინაციის/ფილტრების შეცვლაფრთხილად, დაამატეთ პარამეტრები+ ახალი ველების საშუალებით+ ახალი არგუმენტების საშუალებით

3) პოლიტიკოსები API- ს სხვადასხვა სტილით

3. 1 REST

ვერსია URI ('/v1/... ') ან დომენში (' api-v1. '). სათაურის ვერსია მხოლოდ შიდა შემთხვევებისთვის არის.
დაამატეთ, ნუ ამოიღებთ: ახალი ველები - დაახლ.
სტატუსები/შეცდომები: არ შეცვალოთ კოდი და სტრუქტურა 'error. code/error. message/error. details`.
Idempotention უცვლელია: ნუ გადააქცევთ უსაფრთხო 'POST' s 'Idempotency-Key "" ქცევითი განსხვავებული "გამოწვევა.

3. 2 gRPC / Protobuf

მინდვრის ნომრები წმინდაა: ნუ გამოიყენებთ დისტანციურ ნომრებს, განათავსეთ როგორც „გამოჯანმრთელება“.
მხოლოდ ახალი ოპტიმალური/გამაგრილებელი ველების დამატება; „მკაცრი სავალდებულო“ - ვალიდაციის გზით, არა 'required'.
ვერსიის პაკეტები: 'payments. v1`, `payments. v2`.
სერვისების თავსებადობა: ახალი RPC - ახალი მეთოდი; ჩვენ არ ვცვლით ძველთა ქცევას.

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 გარეშე: დაამატეთ ველები/ტიპები; წაშლა - '@ deprecated' მეშვეობით ფანჯრის გამოცხადებით.
Persististed Queries: გამოიყენეთ მოთხოვნების თეთრი სია საჯარო მომხმარებლებისთვის - უფრო ადვილია აკონტროლოთ თავსებადობა.
Field-level authZ და ტელემეტრია: იცოდეთ რომელი ველები ნამდვილად გამოიყენება ამოღებამდე.

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

3. 4 ვებჰუკი

ბილიკის ვერსია ('/webhooks/v1/payments ') და ღონისძიების ფიქსირებული კონვერტი (' event _ id ',' ტიპი ',' ts ',' data ').
ხელმოწერები/NMAS შეინარჩუნეთ უცვლელი; ახალი ალგორითმები - როგორც დროშის ვარიანტი.
გაფართოებები - მხოლოდ ახალი ველების მეშვეობით 'data.' და 'headers' - ძველების მოხსნის გარეშე.

4) API Gateway და ვერსიების მარშრუტი

Rules-based routing: პრეფიქსი '/v1 ', სათაურით' X-Api-Version ", დომენის მიხედვით.
Shadow/Canary: ასახეთ წარმოების ტრაფიკის ნაწილი ახალ ვერსიაზე „ჩრდილში“, შეადარეთ პასუხები.
Rate/Qutas per-version: იცავს ძველ მომხმარებლებს მიგრაციის დროს.

Sunset headers REST- ისთვის:
  • 'Sunset: ' - ვერსიის გამორთვის თარიღი
  • 'დეპრესია: ნამდვილი' - ვერსია მოძველებულია
  • `Link: ; rel = "deprecation" "- მიგრაციის changelog/hayd
მაგალითი (Nginx-style, გამარტივებული):
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 Schema для REST; Protobuf descriptors для gRPC; SDL registry для GraphQL.
CI შემოწმებები: linters + „breaking-changes შემოწმება“ PR- ზე.
Consumer-Driven Contracts (CDC): მომხმარებელთა ტესტები (Pact/ანალოგი) - დაცვა უხილავი დარღვევებისგან.
Changelog: მანქანა readable (მაგალითად, 'CHANGELOG. md '+ გამოცემა რეესტრში).

6) ველების ევოლუცია: პრაქტიკული წესები

ID/გასაღებები: არ შეცვალოთ ფორმატი (UUID-int) ახალი ველის '_ v2' და გარდამავალი პერიოდის გარეშე.
დრო/ვალუტა: გამართეთ UTC ISO-8601/epoch და amount _ minor + currency; ნუ შეცვლით მასშტაბს (პენი/ცენტი).
Enum: დაამატეთ მნიშვნელობები - დაახლოებით; არ შეცვალოთ ძველი მნიშვნელობა. REST- სთვის - მიეცით string მნიშვნელობები და არა ints.
Pagination: cursor-based უფრო სტაბილური; ნუ შეცვლით კურსორის სემანტიკას.

7) deprication და Sunset

1. განცხადება (T-90/60): changelog, პარტნიორების გაგზავნა, სათაურები „დეპრესია/Sunset“.
2. სარეზერვო პერიოდი: V1 და V2 პარალელურად მუშაობენ; V1 აღჭურვილია გაფრთხილებებით პასუხებში/ლოგოებში.
3. გამოყენების ტელემეტრია: კიდევ ვინ ეძახის V1? წერტილოვანი კონტაქტები.
4. ყინვაგამძლე V1: მხოლოდ ბარგები/ფიკების გარეშე.
5. გამორთვა (Sunset): 410 Gone ან ბლოკის გვერდი მიგრაციის ინსტრუქციით.

8) განთავისუფლება ტკივილის გარეშე: გაანგარიშების სტრატეგია

Blue/Green ან Weighted Routing: 1-5-25-50-100% ტრაფიკი.
Compatibility window: მინიმუმ 1-2 მცირე გამოშვება, უფრო ხშირად 6-12 თვე გარე API- სთვის.
Feature Flags: ახალი ველების/ლოგიკის ფილიალების ჩართვა ვერსიის შეცვლის გარეშე.
Read/Write გაყოფა: ჯერ დაამატეთ მხარდაჭერა ახალი ველის წაკითხვისთვის, შემდეგ დაიწყეთ მისი წერა.

9) თავსებადობის ტესტირება (პრაქტიკის პაკეტი)

ოქროს ტესტები ძველი ვერსიების პასუხებზე.
სქემების Diff ტესტები: აკრძალვა CI- ში.
Replay წარმოების მარშრუტი staging for V2 (shadow).
Back/Forward სცენარი: ახალი კლიენტი ძველ სერვერზე და პირიქით (სადაც FC დავუშვათ).
ვებჰუკის საკონტრაქტო ტესტები: ხელმოწერის შემოწმება, ფორმატის, დრო.

10) მეტრიკა და SLO ვერსირების პროცესი

მომხმარებელთა% ბოლო MINOR- ში (მიზანი Sunset- ზე 80% -ს შეადგენს).
თავსებადობის შეცდომები/გამოშვების მიუწვდომლობა (მიზანი - 0).
მოძველებული ვერსიის ზარების წილი (Sunset- ის შემცირება).
კლიენტის მიგრაციის დრო (საშუალო/p95).
Latency/regression delta ვერსიებს შორის (ბაზაზე უარესი არ არის).

11) არტეფაქტების მაგალითები

OpenAPI (ფრაგმენტი, ველის დეგრადაცია):
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 }
Protobuf (აღდგენა და v2 პაკეტი):
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): ვერსია 'envelope. version`; ახალი ატრიბუტები არჩევითია; დედაპი და შეაჯამა თანაბრად მუშაობენ ვერსიებს შორის.
ანგარიში/CSV: ვერსია ფაილის/ქუდის სახელით; დაამატეთ სვეტები მარჯვნივ; ნუ შეცვლით წესრიგს/ტიპებს.

13) მთავრობა და როლები

ხელშეკრულების მფლობელი, API Steward (წესები და ლინტერები), Release Manager (Sunset/კომუნიკაციები).
RFC პროცესი სარეკრეაციო ცვლილებებისთვის: ბიზნესის დასაბუთება, მიგრაციის გეგმა, არტეფაქტები, თარიღები.
API- ის ერთიანი კატალოგი: სადაც ჩანს სქემები, ვერსიები, Sunset კალენდარი, კონტაქტი.

14) ანტი შაბლონები

„მშვიდი“ დარღვევები: ჩვენ ვცვლით სტატუსს/შეცდომას/ველის ტიპს ვერსიის გარეშე.
Protobuf ნომრების ხელახალი გამოყენება - ანადგურებს რეფლექსს და ძველ მომხმარებლებს.
GraphQL ველების გამოყენების ტელემეტრიის გარეშე არის „შეხების“ მოცილება.
ყველაზე გლობალური v2 არის მეგამიგრაცია წერტილოვანი ევოლუციის ნაცვლად.
საზოგადოებრივი API- ის query პარამეტრის ვერსია აშკარა და დაუცველი სქემაა.
არ არსებობს მიგრაციის ჰაიდები და მაგალითები - პარტნიორები ჩერდებიან, ვადები იშლება.

15) ახალი ვერსიის Check list

  • განახლებულია სქემა (OpenAPI/Protobuf/SDL), გაიარა საბრძოლო მასალები და ყუთების შემოწმებები.
  • დაემატა ინტეგრაციისა და ხელშეკრულების ტესტები (CDC).
  • SDK მზად არის/კოდის მაგალითი/მიგრაციის ჰაიდი და Changelog.
  • ჩართულია 'დეპრესია/Sunset' (ძველი ვერსიისთვის) + გვერდი „როგორ წავიდეთ“.
  • Canary/Shadow გეგმა, ალერტა და დაშბორდები მეტრიკის შედარებისთვის.
  • საპირისპირო თავსებადობა შენარჩუნებულია შეთანხმებული ვადით.
  • დაბრუნების გეგმა (rollback) და რისკის მატრიცა შეთანხმებულია.

რეზიუმე

სტაბილური API არის პროცესი და არა „ერთხელ და სამუდამოდ“. იცხოვრე წესების შესაბამისად: SemVer + add-only ევოლუცია + სქემების რეესტრი + საკონტრაქტო ტესტები + Sunset პროცედურები. გაიზიარეთ სტილები (REST/gRPC/GraphQL) და მათი პოლიტიკოსები, დაუკავშირდით ვერსიებს API Gateway- ზე, გადაიტანეთ კანაფები, გაზომეთ ეფექტი. ასე რომ, თავიდან აიცილებთ „გატეხილ სიურპრიზებს“, დააჩქარებთ პარტნიორების ინტეგრაციას და შეინარჩუნებთ პროგნოზირებას ფულადი და შესაბამისობის კრიტიკულ დომენებზე.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

Telegram
@Gamble_GC
ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.