GH GambleHub

Պայմանագրային փորձարկում

1) Որտե՞ ղ օգտագործել պայմանագրերը

HTTTRT/JSON 'ռեսուրսներ, համայնքներ, ֆիլտրեր, գաղափարախոսություն, սխալներ։

GRPC/Delobuf: հաղորդագրությունների տեսակները, կարգավիճակները, սեմանտիկան «dead.ru», backward-compat v.proto։

GraphQL 'սխեմաներ, non-nox, հրահանգներ, պերմիշեն դաշտերի վրա։

Հաղորդագրություններ/strims (Kafka/Pulsar/MSS): event սխեմաները (Avro/JSON/Delobuf), կուսակցության բանալիները, կարգը, գաղափարական բանալիները։

Ներքին SDK/գրադարանները 'հանրային գործառույթներ/բացառություններ/արտադրողականության պայմանագրեր։


2) CDC մոդել 'դերեր և արտեֆակտներ

Սպառողը հրապարակում է սպասումների պայմանագիրը (մոտավոր հարցումներ/պատասխաններ, տեսակների մատրիցներ, ինվարանտներ)։

Մատակարարը շեղում է պարամետրերի ստուգումը իր կոդերի/հարմարվողի/handler 's-ի դեմ։

Բրոքերը (Pact Broker/Backstage/artefact-repo) պահպանում է տարբերակները, թեգերը ("wwww.ru", "canary") և microsoft 'consumer @ v provider @ v "։

Մրցույթի քաղաքականությունը 'պրովայդերի դրույքաչափը արգելված է, եթե խախտվում է ցանկացած «պրոդ-ռելեվանտային» պայմանագիր։


3) Ի՞ նչ ամրագրել պայմանագրում (HTTP օրինակ)

Առնվազն

Մեթոդ/պարամետրեր/վերնագրեր (համեղ auth, idempotent բանալին)։

Մարմինը և տիպիկ մատրիցները (տիպը/ձևաչափը/ռեգեքպը/միջակայքը)։

Սխալների իրականացումը և կառուցվածքը. կայուն «error _ code»։

Սեմանտիկ ինվարանտներ 'տեսակավորում, եզակիություն, մոնոնտոնիզմ «created _ at»։

Նավթի սպասումները (oporation): p95, չափի լիմիտներ, rate-limit վերնագրեր։

Պայմանագրի հատվածը (պարզեցված)

json
{
"interaction": "GET /v1/users/{id}",
"request": { "method": "GET", "path": "/v1/users/123", "headers": {"Accept":"application/json"} },
"matchers": {
"response.body.id": "type:number",
"response.body.email": "regex:^.+@.+\\..+$",
"response.body.created_at": "format:rfc3339"
},
"response": {
"status": 200,
"headers": {"Content-Type":"application/json"},
"body": {"id": 123, "email": "alice@example.com", "created_at": "2025-10-31T12:00:00Z"}
},
"error_cases": [
{
"name":"not_found",
"request":{"path":"/v1/users/9999"},
"response":{"status":404, "body":{"error_code":"USER_NOT_FOUND"}}
}
]
}

4) Իրադարձությունների պայմանագրերը (event-driven)

Իրադարձության սխեման '"type", "version", "id'," occurred _ at _ utc "," proder "," wwww.ject "," payload "։

Invarants: անփոփոխ «id '» և «(type, id)», կարգուկանոնը կուսակցության ստեղնի սահմաններում, «sequence» մոնոնիականությունը։

Schema Registry: պահպանում է էվոլյուցիան և կանոնները (backward/forward/fox)։

Կոնսյուսերի պայմանագիր-թեստերը '«ոսկե» իրադարձություններ և բացասական փուլեր (անհայտ դաշտեր, nullable)։

Avro-սխեմայի օրինակը (հատված)

json
{
"type":"record","name":"UserRegistered","namespace":"events.v1",
"fields":[
{"name":"id","type":"string"},
{"name":"occurred_at_utc","type":{"type":"long","logicalType":"timestamp-millis"}},
{"name":"email","type":"string"},
{"name":"marketing_opt_in","type":["null","boolean"],"default":null}
]
}

5) Էվոլյուցիա և համատեղելիություն

Հետաքննության տարբերակները 'MAJOR-ի սեմանտիկան։ MINOR. PATCH "(MAJOR - կոտրող)։

REST-ի կանոնները

Մի կոտրեք, մի հեռացրեք դաշտերը, մի փոխեք տեսակը/արժեքը «error _ code»։

Ավելացրեք օպտիկական դաշտերը դեֆոլտով։ նոր էնդպոինտներ «մոգության» փոխարեն։

Դեպրեսիա 'գովազդ, զուգահեռ աջակցություն, հեռացում մետրերով։

GraphQL: Դաշտերը միայն ավելացրեք, non-nants ներկայացնել փուլերի միջոցով։ տեղաբաշխման հրահանգներ։

GRPC/International: չօգտագործել դաշտերի համարները։ միայն ավելացրեք նոր optional։

Events: «vN» սխեմա; պահպանակները պարտավոր են անտեսել անհայտ դաշտերը (ծույլ)։


6) Բացասական և ինվարանտային ստուգումներ

Negative: սխալ տեսակներ, արգելված արժեքներ, հակամարտական պարամետրեր, ավելի բարձր, քան սահմանները։

Diariants: Պատասխանների տեսակավորումը, «id» եզակիությունը, «next _ cursor» ճկունությունը, կրկնության ընթացքում հակամարմնային պատասխանը։

Ժամանակավոր ասպեկտների պայմանագրերը ՝ "created _ at 'RFC339/UTC, տեղական օրվա ճիշտ կանխատեսումը տրանսպորտային պայմանագրի մի մասն չէ, փոխանցվում է բիզնեսի ինվարանտներին։


7) Մոսկվան-գեներացիան և տեղական զարգացումը

Մատակարարներից ստեղծվում են պրովայդերի օրինակներ սպառողի զարգացման համար։

Իրադարձությունների համար '«վալիդային/սահմանային» հաղորդագրությունների գեներատորներ, համաձայն սխեմայի։

Ալգորիթմները նշվում են պայմանագրի տարբերակով և հավաքման ամսաթվով։ արգելված է հրապարակումը։


8) CI/CD (Jours-pline)

1. Consumer CI:

Lint/հավաքածու wwww.unit/պայմանագիր-թեստերը ցույց են տալիս հրատարակությունը www.ract-broker (07: 'consumer @ 1։ 7. 0`).

2. Provider CI:

Տեղական/բեռնարկղում ռուսական ռելեվանտային շարժիչների («www.ru »/« staging») բարձրացումը հաստատեց broker կարգավիճակի հրապարակումը։

3. Release Gate:

Պրովայդերի դրույքաչափը արգելափակված է, եթե չունենք չկատարված պայմանագրեր։

4. Nightly Matrix:

Մատրիցա www.consumer versions provider versions '; հաշվետվություններ և անհանգստություններ։


9) Օրինակներ օրինակների վերաբերյալ

9. 1 REST 'դասընթացների պագինացիա (պայմանագրային ինվարանտ)

Պատասխանը պարունակում է «items []», «next _ cursor» (nullable), «limit», «total» (oporatal)։

Invariants: 'len (items) www.limit', կրկնակի մարտահրավեր նույն «cursor» -ի հետ։

Սխալ, եթե միևնույն ժամանակ նշված են «cursor» և «page»։

9. 2 Idempotenty POST

Պայմանագիրը պահանջում է «Idempotency-Key» վերնագիրը։

Invariant: Նույն բանով երկրորդ հարցումը վերադարձնում է նույն «id »/կարգավիճակը։

9. 3 Իրադարձություններ ՝ կարգուկանոնի երաշխիքներ

Պայմանագրում կուսակցության բանալին '«partection _ key = user _ id»։

Invarant: «sequence» -ը միապաղաղ աճում է ստեղնաշարի ներսում։ կոնսյումերը պետք է կրկնություններ մշակի։


10) Ապահովությունն ու գաղտնիությունը պայմանագրերում

Չի ներառել PDN/գաղտնիքները օրինակներում միայն սինթետիկ է։

Ամրագրել անվտանգության պարտադիր վերնագրերը '«Authorization», «X-Signature», «Replay-Systvention»։

Webhuks-ի համար ստորագրության պայմանագիրը և պատասխանը '2x '/retraev։

Պայմանագիրը-թեստերի լոգարաններում զգայուն դաշտերի դիմակավորում է։


11) Գործիքներ

Pact/Pactflow/Pact Broker - HTTP/International պայմանագրեր, կոդավորման մատրիցա։

OpenAPI/AsyncAPI - + թեստային գեներատորներ (Dredd, Schemathesis)։

Karate/REST Assured-ը REST կոդավորման բեմական ստուգումներ է։

Windobuf/gRPC-ը '«buf», «Nobolint», թեստերը։ Schema Registry-ի համար Avro/JSON/Delo հոսքերում։

GraphQL-ի համար (graphql-compat), wwww.apshot-ի սխեմաների թեստերը։


12) Կեղծ պրովայդերի ստուգման (պարզեցված)

python def verify_contract(provider, contract):
for case in contract["cases"]:
req = build_request(case["request"])
res = provider.handle(req) # локально/контейнер assert match_status(res.status, case["response"]["status"])
assert match_headers(res.headers, case["response"].get("headers", {}))
assert match_body(res.body, case["matchers"], allow_extra_fields=True)
for neg in contract.get("error_cases", []):
res = provider.handle(build_request(neg["request"]))
assert res.status == neg["response"]["status"]
assert res.json.get("error_code") == neg["response"]["body"]["error_code"]

13) Anti-patterna

«Postman Skrinschots» -ը պայմանագիր է, չկա տարբերակներ/տիպիկ խաղողներ/ավտոմատ վալիդացիա։

Oversneyping: Պայմանագիրը ճշգրիտ արժեքներ է արձանագրում տեսակների/պաթոգենների փոխարեն ՝ կեղծ անկումներ։

Մեկ ընդհանուր պայմանագիր տարբեր տարածաշրջանների/ալիքների համար 'անտեսում է փոփոխականությունը (դրոշները, գեո կանոնները)։

Պայմանագրեր առանց բրոկերների/մատրիցայի. Դուք չեք կարող հասկանալ, թե որ տարբերակները համատեղելի են։

E2e-ի փոխարեն 'դանդաղ, թանկ, անկայուն։

Բացասական/invariant դեպքերի բացակայությունը, միայն «կանաչ ուղին» փորձարկվում է։


14) Դիտողությունն ու շահագործումը

Կարգավիճակի արտահանումը broker + dashbord «health Express»։

Ալբերտներ 'պրովայդերի նոր անկումներ ընդդեմ «07» -contratts, իրադարձությունների «unknown field» աճը։

Ուղեգիր ՝ «wwww.ract _ id», «version», «decision _ id», ստուգման լոգարաններում։


15) Դեպրեսիայի գործընթացը

1. Ավելացնել դաշտը/էնդպոինտը (չի կոտրում)։

2. Նշեք հինը որպես «deprecated» ճշգրտության մեջ, հայտարարեք ժամանակը։

3. Հետևեք սպառողներին լոգարաններով/բրոկերով; միգրացիոն դելդներ։

4. Միացրեք «ստվերային» deny steidge (www.y-run), ապա enforce։

5. Հեռացնել օգտագործման զրոյական մասնիկից և ստուգման հաստատումից հետո։


16) Ճարտարապետի չեկի թերթիկը

1. Հայտնաբերվել են սպառողները և նրանց սեփականատերերը։ Պայմանագրերը տարբերակվում են։

2. Կա՞ ն բրոքեր և մատրիցա, որոնք ունեն միջավայրեր։

3. Պայմանագիրը ներառում է բացասական և invariants (idiempotention, կուրսորներ, տեսակավորում)։

4. Իրադարձությունների համար Schema Registry-ը և միգրանցների ռեժիմը։

5. Propline-ը արգելափակում է պրովայդերի թողարկումը, երբ խախտվում է prod-2019-ը։

6. Արագ տեղայնացման և էվոլյուցիայի քաղաքականության գործընթացը։

7. Արտադրվում են օրինագծեր, կան տեղական իրադարձությունների գեներատորներ։

8. ՊԴ-ի դիմակավորում և անվտանգության պարտադիր վերնագրեր։

9. Metrics/alerts պայմանագրերով միացված են, կան զեկույցներ։

10. Պայմանագրերը ստուգվում են CI-ում երկու կողմերում (consumer և provider)։


Եզրակացություն

Պայմանագրային փորձարկումը փոխանցում է «ճշմարտությունը» փոխազդեցությունների մասին տարբերակված արտեֆակտների և դարձնում է կանխատեսելի։ CDC-ն, բրոքերը և սխեմաների էվոլյուցիայի կարգապահությունը փոխարինում են «կոտրող անակնկալները» կառավարվող գործընթացին 'արագ ստուգումներ, հստակ ինվարանտներ և տարբերակների թափանցիկ համատեղելիություն։ Սա նվազեցնում է e2e արժեքը, արագացնում է օրինագծերը և բարելավում ամբողջ պլատֆորմի որակը։

Contact

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

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

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

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

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

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