GH GambleHub

API պայմանագրային համատեղելիությունը

Ինչու՞ է անհրաժեշտ պայմանագրային համատեղելիություն

Պայմանագրային համատեղելիությունը API-ի կարողությունն է զարգացնել առանց գոյություն ունեցող ինտեգրման խզման։ Աճող API համակարգերում փոխվում են հաճախորդների կոդի ավելի հաճախ։ համատեղելիությունը թույլ է տալիս, որ ֆիտերատիվորեն արտադրեն առանց «մեծ տեղափոխությունների»։

Հիմնական գաղափարը 'պայմանագիրը առաջնային է, փոփոխությունները կատարվում են մրցույթի կանոններով և ինքնաբերաբար ստուգվում են։

Հիմնական հասկացությունները

Պայմանագիրը ինտերֆեյսի պաշտոնական ճշգրտումն է 'ռեսուրսներ/մեթոդներ/իրադարձություններ, տվյալների սխեմաներ, սահմանափակումներ, SLA, անվտանգության պահանջներ։

Մատակարարը (provider) API-ի սեփականատերն է։ Սպառողը (consumer) հաճախորդն է/ինտեգրումը։

Համատեղելիությունը

Backward: Նոր մատակարարը աշխատում է հին սպառողների հետ։

Forward: Հին մատակարարը աշխատում է նոր սպառողների հետ (սովորաբար հասնում է «համբերատար ընթերցողների»)։

Fox: Ինչպես backward, այնպես էլ forward (ամենաուժեղ տարբերակը)։

Ադելիտիվությունը առանց գոյություն ունեցող տարրերի ավելացումն է։

Տարբերակման քաղաքականությունը

Semantic Versioning (խորհուրդ)

MAJOR-ը կոտրող փոփոխություններ է (միայն API-ի նոր գիծ արտադրելիս '' '</v2>,')։ v2`).

MINOR-ը ադիտիվ փոփոխություններ է (նոր ալգորիթմային դաշտեր/մեթոդներ)։

PATCH - առանց պայմանագրի փոփոխության։

Deprecation Policy 'հնացած տարրերի հայտարարությունը, աջակցության պատուհանը (sunset), վերնագրերում/մետատվյալներում նախազգուշացումները, հեռացման պլանը։

Անվտանգ vs վտանգավոր փոփոխություններ

Անվտանգ (սովորաբար backward-compatible)

JSON/Medobuf/Avro-ում միգրացիոն դաշտի ավելացումը։

Նոր էնդպոինտի/մեթոդի/իրադարձությունների ավելացումը։

Enum-ի ընդլայնումը նոր արժեքներ, եթե սպառողները հանդուրժում են անհայտ արժեքներին։

Լիմիտների բարձրացումը (օրինակ ՝ «www.Items») առանց նվազագույն խստացման։

Nullable-ի ավելացումը ճիշտ դեֆոլտներով։

Նկարագրության/օրինակների տեքստի փոփոխությունը։

Վտանգավոր (կոտրում են համատեղելիությունը)

Փոխակերպել/հեռացնել դաշտերը, փոփոխել նրանց տեսակը կամ պարտավորությունը։

Սեմանտիկայի փոփոխությունը կարգավիճակը-105/սխալ է (օրինակ ՝ «200», դարձավ «204» կամ «404»)։

Լուծիչների ձևաչափի փոփոխությունը (UUID entint)։

Վալիդացիայի խստացումը (ավելի խիստ նվազագույն/պաթթերներ) առանց վարկածի։

Կարգի և կառուցվածքի փոփոխությունը gRPC-strimes/իրադարձությունների մեջ։

Նոր դաշտերի համար Corobuf-ում թեստերի համարները փոխակերպելը։

Փոխազդեցության ոճերի համատեղելիությունը

REST/HTTP + JSON Schema

Addimation: Նոր դաշտերը սահմանվում են որպես «optional »/« nullable»։

Toler.Reader-ը հաճախորդի մոտ 'անտեսել անհայտ դաշտերը։ ապավինել կարգին։

Տարբերակումը 'մաժորը ճանապարհին ('/v2 «) կամ մեդիատիպում (» applations/vnd. example. v2+json`).

ETag/If-Match 'անվտանգ ապդեյտների համար առանց մրցակցության։

Սխալները 'մեկ ձևաչափ («type», «code», «title», «detail», «trace _ id»), մի փոխեք «code» արժեքները առանց մաժորի։

Պագինացիա 'կուրսորները ավելի նախընտրելի են, քան set; ավելացրեք դաշտերը «next _ cursor», մի փոխեք գոյություն ունեցող իմաստը։

gRPC / Protobuf

Թեգերի համարակալումը անփոփոխ է։ Հեռավոր թեգերը չօգտագործել։

Նոր դաշտերը '"optional '/" repeated", սերվերի խելացի դեֆոլտներով։

Մի փոխեք հաղորդագրությունների կարգը և պարտավորությունը streaming-RPC-ում։

Սխալների ստատուսները կայուն են («MSALID _ ARGUMENT», «FAILED _ PRECONDIM» և այլն); նոր սեմանտիկան բացատրում է մեթոդի նոր տարբերակը/108։

Event-driven (Kafka/NATS/Pulsar) + Avro/JSON Schema

Իրադարձությունների անվանումը '"domain. action. v{major}`.

Նոր դաշտերը օպորացիոնալ են։ հատկացրեք միջուկը և հարստացումը («.enriched»)։

Սխեմաների գրանցումները 'կոդավորման կանոնները (BACKWARD/FORWARD/FOX) թեմայով/իրադարձության մասին։

Enum-ի ընդլայնումը թույլատրելի է սպառողների կողմում։

Խմբավորման/կարգի ստեղնաշարի փոփոխությունը ագրեգատի համար = կոտրող փոփոխություններ։

GraphQL

Դաշտերի/տեսակների ավելացումը անվտանգ է։ / հեռացումը միայն @ deprecated և պատուհանի միջոցով։

Մի փոխեք տեսակները/nullable առանց մաժորի։

Վերահսկեք complexity/depth - լիմիթները պայմանագրի մի մասն են։

Կայուն էվոլյուցիայի արտոնագրերը

Delitive-first: Ընդարձակեք առանց կոտրելու։

Capability negotiation: հաճախորդները ասում են, որ աջակցում են (վերնագրեր/պարամետրեր/պայմանագրեր), սերվերը հարմարվում է։

Պայմանագրի սահմանները 'գրանցեք MGC (նվազագույն երաշխիքային պայմանագիր) և բաժանեք ընդլայնումը (հետադարձ բուրգի մոդել)։

Tolerensby-ը բացատրում է. Հաճախորդները անտեսում են ավելորդ և ճիշտ կերպով վերարտադրում անհայտ արժեքները enum (fallback)։

Dance-write/Dance-emit: մաժորային փոփոխությունների ժամանակ որոշ ժամանակ արտադրեք «v1» և «v2» զուգահեռ։

Sunset headers/Events: Նախապես տեղեկացրեք տարբերակների հեռացման մասին։

Governational և ավտոմատիզացիա

API-liners

OpenAPI/Spectral: Անուններ, պագինացիաներ, սխալներ, դաշտեր։

Buf/Eurobuf 'վերաիմաստավորման արգելք, կոդավորման նոտաներ։

AsyncAPI/Schema Registry-ը CI-ի մակարդակում սխեմաների համատեղելիությունն է։

Կոդավորման կատալոգը (SSOT) 'կենտրոնացված սխեմաների/տարբերակների տեղադրումը ածխաջրածինների պատմության հետ։

API Guild: գիլդիա/հանձնաժողովը, որը ընդունում է կանոններ, ձևանմուշներ և փոփոխություններ։

Change Live: RFC/ADR, rele.notes, միգրացիոն սկավառակներ։

Փորձարկումներ 2019

Schema-diff-ը CI-ում 'մենք արգելափակում ենք քնի կոտրող փոփոխությունները (OpenAPI-diff, Buf breaking, SR compatibility)։

Consumer-Driven Corrac.ru (CDC): Pact/նմանատիպ - հատուկ սպառողների մատակարարման դեմ պատժամիջոցների ստուգում։

Golden samples: Ստանդարտ հարցումներ/պատասխաններ և ռեգրեսիայի իրադարձություններ։

E2E Canary: Records-ը/առանձին կոնսումմերի խմբերը։

Chaos/latency: Թայմաուտների/ռեգրերի ստուգումը, latency-SLO-ի փոփոխությունը համարվում է պայմանագրի փոփոխություն։

Lenta.ru և դեպրեքեյթ

1. Հայտարարեք դեպրեսիտ 'նշեք տարրը, նշեք sunset-ի ժամկետը և այլընտրանքը։

2. Աջակցեք կոմպոզիցիաների ժամանակահատվածը 'drix-write/drone-emit, կամուրջներ, ադապտերներ։

3. Հավաքեք հեռուստացույց, ո՞ վ է օգտագործում հինը։

4. Հաղորդակցություն 'հաղորդագրություններ, ռելիզային նոտաներ, թեստային ստենդներ։

5. Հեռացում 'պատուհանի երկարությամբ' ֆիքսված ֆոսֆորով հեռացում։

Փոփոխությունների օրինակներ

REST

Կար

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
}

Event

`payment. authorized. v1 '(միջուկը) + "payron. enriched. v1 '(հարստացում)։ Կրիտիկական ճանապարհի սպառողները կարդում են միջուկը և կախված չեն հարստությունից։

Antipatterny

Swagger-wash: Կառուցվածքային կերպով գոյություն ունի, բայց գործընկերության վարքագիծը տարբերվում է դրանից։

Breaking by stealth: փոխեցին տիպը/կարգավիճակը/ձևաչափը առանց նոր տարբերակի և պատուհանի։

Հում CDC իրադարձությունները որպես հանրային պայմանագիր 'BD սխեմաների արտահոսք, էվոլյուցիայի անհնարինություն։

Կոշտ հաճախորդը 'ընկնում է անհայտ դաշտերում/արժեքներով։ toler.reader-ի բացակայությունը։

Winobuf-tegs-ի վերարտադրումը տվյալների հանգիստ կոռուպցիա է։

Լատինականությունը որպես «ոչ կոնտակտային», անսպասելիորեն p95 - սպառողները կոտրում են թայմաուտները։

Chek-Light 2019 (Merjem)

  • Ադդիտիվ փոփոխությունները (կամ մաժորի տարբերակը պատրաստված է)։
  • Linters/www.cheks անցան, մրցույթի կանոնները կանաչ են։
  • Սխալները/108/ստատուսները չէին փոխում սեմանտիկան։
  • Enum-ն ընդլայնված է առանց հին արժեքների։ հաճախորդները toler.ru են։
  • MGC սահմանները անփոփոխ են։
  • Նորարարված օրինակներ/MSK։
  • Մաժորի համար 'dult-write/dult-emit, sunset-ամսաթիվը, կոմմ պլանը։
  • CDC/Golden/E2E թեստերը անցան։

FAQ

Ինչպե՞ ս է backward տարբերվում forward-ից։

Backward, նոր սերվերները չեն կոտրում հին հաճախորդներին։ Forward-ը, նոր հաճախորդները չեն կոտրվում հին մրցույթների վրա (toler.reader-ի և կոկիկ դեֆոլտների միջոցով)։

Ե՞ րբ անել «/v2 »։

Երբ փոխվում են ինվարանտները/սեմանտիկան, դաշտերը/մեթոդները հանվում են, անհրաժեշտ է անվտանգության նոր մոդել, ավելի հեշտ և ազնիվ նոր գիծ։

Կարո՞ ղ եք ապրել առանց Schema Registry/ոսպնյակների։

Տեսականորեն, այո, գրեթե հաճախակի ռեգրեսիաներ են և «թաքնված» կոտրվածքներ։ Ավտոմատիզացիան ավարտվում է։

Արդյո՞ ք Էնումը կարող է ընդլայնվել։

Այո, եթե հաճախորդները ճիշտ մշակում են անհայտ արժեքներ (fallback/ignore)։ Հակառակ դեպքում 'մաժոր։

Արդյունքը

Պայմանագրային համատեղելիությունը + կարգապահությունն է + ավտոմատիզացիան։ Նախագծեք ադիդիտիվ, տարբերեք կոտրող փոփոխությունները, օգտագործեք toler.rader, ավտոմատ ստուգեք օրինագծերը և CDC-ը, պլանավորեք դեպրեքեյթ։ Այսպիսով, API-ն կարող է արագ զարգացնել, իսկ ներմուծումը ՝ կայուն մնալ։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։