Logo GH

Келишимдик тестирлөө API

1) Эмне үчүн келишим сыноо

Келишим кардардын күтүүлөрүн жана провайдердин убадаларын белгилейт: маршруттар/ыкмалар, аталыштар, телолордун схемалары, статустар, каталардын семантикасы жана чектөөлөр. Максаты - интеграцияга чейин шайкеш келбеген өзгөрүүлөрдү кармоо жана версияларды коопсуз, оор E2E жок чыгаруу.

2) Ыкмалар

Consumer-Driven Contracts (CDC): кардар күтүүлөрдү түзөт (Pact жана аналогдору); провайдер аларды такай текшерип турат.
Specification: бир чындык булагы катары келишим (OpenAPI/Protobuf/GraphQL SDL); тесттер спецификацияга каршы ишке ашырууну тастыктайт.
Окуя: билдирүүлөр схемалары (Euro/JSON схемасы/Protobuf) + брокер/реестринде шайкештик эрежелери.

3) HTTP/REST: Specification агымы

1. Келишим: OpenAPI 3. x (схемалар, мисалдар, коддор).
2. Линт жана статанализ: стили, милдеттүү талаалар, бирдиктүү коддору.
3. Validation ишке ашыруу: OpenAPI каршы тесттер генератор (schemathesis/Dredd-мамиле) + кол терс.
4. Снапшоттор: жооптордун мисалдарын, ETag семантикасын, демпотенттик аталыштарын жазыңыз.

Терс келишимдин мисалы (OpenAPI үзүндүсү):
yaml paths:
/v1/payments:
post:
responses:
"201": { $ref: "#/components/responses/PaymentCreated" }
"409": { description: Duplicate by Idempotency-Key }
"422": { description: Schema/Business validation failed }

4) CDC (Pact-мамиле)

Жашоо цикли:

1. Consumer тестти жазат, pact файлын түзөт (күтүүлөр).

2. Брокерге жарыялоо (артефакт).

3. CI Provider кызматы (же келишим-стойка) көтөрөт, pact's текшерет.

4. Брокер can-i-deploy шайкештик матрицасын эсептеп чыгат.

Үлгү consumer-тест (psevdo-JS):
js pact
.given("wallet exists")
.uponReceiving("get wallet")
.withRequest({ method:"GET", path:"/v1/wallets/w123", headers:{ "Authorization": term({generate:"Bearer x", matcher:/^Bearer\s.+/}) }})
.willRespondWith({
status: 200,
headers: { "Content-Type": "application/json" },
body: like({ id:"w123", currency: "EUR", balance: 0 })
});

5) gRPC/Protobuf келишимдер

Келишим - пакеттерди/кызматтарды версиялоо менен '.proto'.
Шайкештик: Тегдерди кайра колдонбойт, жөн гана optional менен жаңысын кошуп, колдонулган талааларды алып салбайт; номерлерди сактоо.
Тесттер: Server/кардар туруктуулукту түзүү, Auto өндүрүлгөн учурларда ижарага + терс (unknown fields, size-limits).

6) Event келишимдер (Kafka/NATS/...)

Схемы: Avro/JSON Schema/Protobuf в Schema Registry.
Шайкештик саясаты: 'BACKWARD' (көбүнчө жетиштүү) же 'FULL'.
Өндүрүүчүнүн сыноолору: схемага каршы билдирүүнү тастыктайт; тесттер: эски жана жаңы нускасын кабыл алат.
Инварианттар: түспөлдүүлүктүн ачкычтары, тартип/кайталануучулук, дедупликация семантикасы.

Евро-схеманын мисалы (фрагмент):
json
{"type":"record","name":"PayoutCreated","fields":[
{"name":"payoutId","type":"string"},
{"name":"amount","type":"double"},
{"name":"currency","type":{"type":"string","logicalType":"iso-4217"}}
]}

7) шайкештиги жана нускасы

Backward-compatible (сунушталган минималдуу): кошумча талааларды кошуу, бар сындырып жок.
Forward-compatible: керектөөчүлөр белгисиз талааларды четке кагышат.
Толук: экөө тең.
Версиялоо: 'path (/v1)', 'Accept: application/vnd. brand. v2+json`, `proto package v2`.
Deprecation-саясат: терезе чыгаруу (мисалы, 90 күн), эскертүү аталыштары/окуялар.

8) Терс жана каталар - бул да келишим

Стандартташтыруу коддору: 400/401/403/404/409/422/429/5xx, милдеттүү талаалар 'code', 'message', 'trace _ id'.
Өлчөмдөр/лимиттер - келишимдин бир бөлүгү (413/414/431).
Демпотенттик: кайталоо жүрүм-туруму (409 vs 201 same id).
Аталыштары: 'Retry-After' 429/503, 'Idempotency-Key', 'Content-Language' ж.б.

Ката үлгүсү:
json
{ "code":"validation_error", "message":"amount must be ≥ 1", "trace_id":"..." }

9) Маалыматтарды келишим башкарат

Мисалдар/кийинүү жооптор (examples) - жандуу, CI менен тастыкталган.
CDC үчүн фикстуралар - минималдуу, детерминацияланган.
Маалыматтарды генерациялоо - сандар/күндөр үчүн property-based; бирок снапшоттордун туруктуулугун бузууга болбойт.

10) CI/CD Пайплайн (шилтеме)

1. Lint/validate: OpenAPI/Proto/Avro (`validate`, style-линер).
2. Publish: артефакт катары келишим (брокер/реестр).
3. Verify: провайдер CDC пакеттерин/спецификациялык тесттерди айдап жатат.
4. can-i-deploy gate: жашыл матрицасыз бошотууга тыюу салынат.
5. Diff: өзгөртүүлөр шайкеш экенин текшерүү (semantic diff).
6. Отчет: JUnit/HTML, бузуулардын/аныктамалардын тизмеси.

Псевдо-матрица:
yaml jobs:
lint:...
publish-contract: needs: [lint]
verify-provider: needs: [publish-contract]
can-i-deploy:
if: always()
steps: [run: pact-broker can-i-deploy...]

11) Аспаптар (тапшырмалардын класстары боюнча)

Линт/валидаторлор: openapi-linters, protobuf-lint, euro-tools.
CDC: Pact-үй-бүлө/брокер, Spring Cloud Contract, Hoverfly (HTTP жазуулар/репликалар).
Өзгөчөлүктөрү: schemathesis/Dredd окшош мамиле, Postman сыноо + JSON схемасы.
Diff: semantic-diff OpenAPI/Proto/Euro (breaking-өзгөрүүлөрдү аныктайт).
Контейнерлер: Testcontainers провайдер/келишимдик стойка жогорулатуу үчүн.

12) Антипаттерндер

"Атайын-док" коддон өзүнчө → синхрондоштуруу. Келишимди кызматтын жанында сактаңыз.
келишимдин ордуна үчүнчү тараптын кызматы Моки → жаңылыктары боюнча алсыз.
Flake → схемасы менен байланышкан жок кокустук жооптор/генерация.
нускасы жок талаалардын түрлөрүн/милдеттүүлүгүн өзгөртүү.
Билдирүүлөрсүз/депрекациясыз Silent-кеңейтүү.
Терс контракттардын жана ката коддорунун жоктугу.

13) iGaming/каржы өзгөчөлүктөрү

Акча талааларын формалдаштырыңыз: 'amount' - масштабы менен decimal, валюта - ISO-4217, суммалардын инварианттары.
Төлөм/вебхук келишимдери: HMAC/mTLS, anti-replay ('X-Timestamp' терезе), демпотенттик, 'Retry-After'.
Регионалдуулук/Тенанттар: Милдеттүү аталыштар 'X-Tenant/X-Region', билдирүүлөрдү локалдаштыруу.
Окуялар: өзгөрүлбөс журналдар (аудит), дедупликация ачкычтары, жеткирүү кепилдиктери (at least once + idempotent hendlers).

14) Мисалы, "скелет" тесттер

14. 1 Schemathesis-стили (псевдо)

bash schemathesis run openapi. yaml --checks all --hypothesis-deadline=200

14. 2 Postman спецификациялык раннер катары

js pm. test ("Scheme/v1/wallets/{ id} is valid," () => {
const schema = pm. collectionVariables. get("wallet_get_schema");
pm. expect(ajv. validate(JSON. parse(schema), pm. response. json())). to. be. true;
});

14. 3 CDC Provider-текшерүү (псевдо)

bash pact-broker can-i-deploy --pacticipant wallets --version $SHA --to-environment staging

15) Prod-даярдык чек тизмеси

  • Репозиторийдеги келишимдер, CI тастыктайт жана экспонаттарды жарыялайт.
  • CDC критикалык интеграция үчүн киргизилген; broker/matrix "can-i-deploy" иштейт.
  • Шайкештик саясаты (HTTP/gRPC/Events) документтештирилген; автоматтык semantic-diff.
  • Терс келишимдер: каталар, өлчөм чектери, боштук, 'Retry-After'.
  • Тест-маалыматтар аныкталат; үлгүлөрү колдоого алынган.
  • чыгаруу жана deprecation: мөөнөттөрү, эскертмелер, аталыштары.
  • окуялар үчүн - Schema каттоо жана шайкештик режими; өндүрүүчүсү/консюмер эки нускасын сынап жатат.
  • Артефакттар: JUnit/HTML, diff/verify отчеттору, шайкештик матрицасы.
  • Окуя-жол-жобосу: тез rollback келишими/ficha-желеги, интеграторлорго эскертүү.

16) TL; DR

келишимдер боюнча күтүүлөрдү чечүү жана автоматтык түрдө аларды кууп: кардарлардын күтүүлөр үчүн CDC, ишке ашыруу үчүн атайын тесттер, окуялар үчүн схемалар реестри. Катуу шайкештик саясатын жана терс контракттарды (каталар, лимиттер, демпотенттүүлүк) сактаңыз. Жашыл can-i-deploy матрицалары жана semantic-diff жок breaking-өзгөртүүсүз чыгарылышы мүмкүн эмес.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.