GH GambleHub

API нұсқалау стратегиялары

Не үшін нұсқалау керек

API клиенттерге қарағанда тез өзгереді. Нұсқалау фич шығаруға және интеграцияның бұзылуынсыз қателерді түзетуге мүмкіндік береді, өзгерістер рәсімін белгілейді және эволюцияны болжауға болады. Кілт: әдепкі аддитивті өзгерістер, majors - тек сыну үшін, автоматты сәйкестікті тексеру және ойластырылған sunset саясаты.


Негізгі қағидаттар

1. Additive-first: жаңа опциондық өрістер/әдістер/оқиғалар - шамамен; мағынасын алып тастау және өзгерту - мажор.
2. MGC (ең төменгі кепілдік келісімшарт) тұрақты; байыту - capabilities/'? include = 'арқылы.
3. Толерант reader: клиенттер белгісіз өрістерді елемейді және enum кеңейтулерін дұрыс бастан кешіреді.
4. Semantic Versioning: `MAJOR. MINOR. Артефакттар, SDK және оқиғалар үшін PATCH '.
5. Automate: schema-diff, линтерлер және CDC тестілері breaking-өзгерістерді бұғаттайды.


Нұсқаны қайда сақтау керек (мекенжай механикасы)

REST/HTTP

URI-нұсқа: '/v1/orders '→ жай бағыттау, шлюздерде ыңғайлы. Минус - идеялар эволюциясын «бөгейді».
Медиатип/тақырып: 'Accept: application/vnd. example. orders. v1 + json '- пішімді дәл басқару; дебаж жасау қиынырақ.
Query-нұсқасы: '? api-version = 1' - A/B үшін ыңғайлы, бірақ кэш/логтарда жоғалту оңай.
Ұсыным: major-желілер үшін URI + feature/capability flags және минорлы кеңейтулер үшін контент-негация.

gRPC / Protobuf

Пакеттер/сервистер: 'package payments. v1; service PaymentsV1; '- анық сызықтар.
Тегтердің нөмірленуі өзгермейді; жойылған тегтерді қайта пайдалануға болмайды.
Жаңа өрістер - 'optional'; breaking → жаңа '.v2'.

GraphQL

URL-де айқын major жоқ сұлба. Көші-қон @deprecated мен терезелері арқылы эволюция; «нағыз» major - жаңа эндпоинт-схема.
complexity/depth бағдарламасын бақылаңыз - бұл келісімшарттың бір бөлігі.

Event-driven (Kafka/NATS/Pulsar)

Оқиға атауы: 'payment. authorized. v1 '- түріндегі нұсқа.
Үйлесімділік режимдері бар схемалар тізілімі (Euro/JSON Schema/Protobuf) (BACKWARD/FORWARD/FULL).
Major → dual-emit 'v1' және 'v2' өтпелі кезеңге.


Нұсқалар моделі және өзгерістер саясаты

Semantic Versioning

MAJOR - бұзатын өзгерістер: өрістерді жою/қайта атау, партиялану кілттерін ауыстыру, мәртебелердің басқа мағынасы, валидацияны қатаңдату.
MINOR - аддитивті: жаңа міндетті емес өрістер/эндпоинттер/оқиғалар, tolerant-reader кезінде жаңа enum-мәндер.
PATCH - келісімшартты және семантиканы өзгертпей түзетулер.

Deprecation & Sunset

Ескірген ('Deprecated: true', '@deprecated') белгісін қойыңыз, sunset-күнін, баламасын және көші-қон нұсқасын жариялаңыз.
HTTP-де - «Sunset», «Deprecation» тақырыптары; оқиғаларда - жеке '.deprecation. notice`.
Алу туралы шешім қабылдау үшін usage телеметриясын жүргізіңіз.


Стиль бойынша нұсқалық стратегиялар

REST

/ v1 ,/v2.
MINOR: схемаларды кеңейту, '? fields =', '? include ='; қауіпсіз enum-кеңейтулер.
ETag/If-Match және сынусыз үйлесімділікке арналған іспеттес POST.
Қателер - тұрақты пішім ('type', 'code', 'trace _ id').

gRPC

'PaymentsV2. Capture`.
Қателер мәртебесі және deadline семантикасы - келісімшарттың бір бөлігі; өзгерту → жаңа әдіс/қызмет.
Стриминг: Хабарлардың реті туралы келісіңіз және оны minor дегенге өзгертпеңіз.

GraphQL

Өрістер мен түрлерді еркін қосыңыз; жою - '@deprecated' + көші-қон терезесі арқылы; үлкен дизайн → жаңа схема ('/graphql-v2 ').
Интроспекция және сипаттамалар - клиенттердің көші-қоны үшін must-have.

Events

Core vs enriched: ядро тұрақты, байыту қатар өмір сүреді және бөлек нұсқаланады.
Партиялану кілті major-сызық шегінде өзгермейді.
Major-көші-қон - 'dual-emit' + проекциялардың/консьюмерлердің көші-қоны.


Negotiation және capability-жалаулар

Capabilities: клиент жібереді 'X-Capabilities: risk_score,price_v2'; сервер кеңейтілген көрініспен жауап береді.
Ішінара жауаптар үшін Prefer (HTTP) және «hints».
Сокеттерде/ағымдарда - қолдау көрсетілетін кеңейтімдер тізімі бар handshake хабарламасы.


Major-нұсқаларын ауырсынусыз шығару

1. RFC/ADR: неге major қажет, не сынады, тәуекелдер матрицасы.
2. Dual-run: 'v1' және 'v2' параллельді іске қосу (оқиғаларды екі рет жариялау, екі gateway-роут, трафикті көрсету).
3. Көші-қон адаптерлері: ауыр клиенттерге арналған прокси/трансляторлар 'v1 v2'.
4. Канарейка: gateway-дегі клиенттер топтары/топиктер/тегтер бойынша.
5. Sunset-жоспар: күндер, коммуникация, стендтер, тест деректері, пайдалану мониторингі.


Платформа мен инфрақұрылымның рөлдері

API Gateway/Service Mesh: нұсқасы, тақырыптары, жолдары бойынша бағыттау; rate-limit и auth per-version.
Schema Registry & Catalog: diff тарихы бар арнайы/схемалар үшін ақиқат көзі.
CI/CD: линтеры (Spectral, Buf), schema-diff (OpenAPI-diff, Buf breaking), CDC (Pact).
Observability: нұсқа логиге/трейске/метрикаға түсуі керек.


Нұсқаларды тестілеу

Schema-diff в PR: breaking бұғаттау.
Consumer-Driven Contracts: провайдер нақты тұтынушылардың келісімшарттарына қарсы тексеріледі.
Golden samples: нұсқасына эталондық жауаптар.
E2E-канарейка: p95/p99, нұсқалар арасындағы қателер мен таймауттарды салыстыру.
Оқиғалар үшін replay: проекциялар айырмашылықтарсыз v2-ге қайта жинақталады.


Деректер мен дерекқорларды көшіру

REST/gRPC үшін: БД көші-қоны expand-and-contract арқылы үйлестіріледі (бағанды қосыңыз → жаза бастаңыз → оқуға ауысыңыз → ескісін жойыңыз).
Events үшін: dual-emit және консьюмерлер көші-қоны; кейде - логтың жаңа проекцияларға қайта ойнатылуы.
«Үлкен жарылыстар» жасамаңыз - кері шегініп қадамдарға бөлшектеңіз.


Қауіпсіздікпен өзара байланыс

Scopes per version: v1/v2 үшін жеке OIDC-scopes/рөлдер.
Құпиялар/claim 's токені - келісімшарттың бір бөлігі; оларды ауыстыру = major.
PII/PCI - payload бағдарламасын қажетсіз кеңейтпеңіз; жаңа өрістер - ең аз артықшылықтармен.


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

Swagger-wash: спецификациясы жаңартылды, сервер жоқ (немесе керісінше).
Protobuf-тегтерді қайта пайдалану - деректердің тыныш бұзылуы.
Majorсыз enum-мағыналарды ауыстыру.
Global '/v2 '«косметика үшін»: сыну фактісінсіз нұсқа.
sunset/usage-метриктер ұмытып кетті: ескі нұсқасын қауіпсіз түрде түсіру мүмкін емес.
Түрлі major үшін бір ортақ топик: реттер мен кілттерді араластыру.


Шығару алдындағы чек парағы

  • Өзгерістер аддитивті немесе жеке major-сызық дайындалған.
  • Линтерлер мен schema-diff жасыл (breaking өткен жоқ).
  • SDK/мысалдар/құжаттар, үйлесімділік туралы түсіндірмелер жаңартылды.
  • Клиенттерде tolerant reader қосылған; enum-fallback сынақтан өтті.
  • major үшін - dual-run жоспары, адаптерлер, канарейка, sunset-даталар және тарату.
  • Метриктер/логтар/трейлерлер ол бойынша нұсқаны және сегменттеуді қамтиды.
  • v1, v2 салыстыру үшін стенд және алтын жиынтықтары бар.
  • Оқиғалар үшін - BACKWARD/FULL режиміндегі схемалар тізілімі, топтастыру кілттері өзгермейді.

Үлгі үлгілері

REST (URI + negotiation)

Бағыт: '/api/v2/orders/{ id} '

Заголовок: `Prefer: include=items,customer`, `X-Capabilities: risk_score`

Deprecation: `Sunset: 2026-06-30`, `Link: ; rel="alternate"`

Protobuf/gRPC

proto package payments.v2;

service PaymentsV2 {
rpc Capture (CaptureRequestV2) returns (CaptureResponseV2);
}
💡 В v1 - сипаттамадағы deprecated белгісі және құжаттамадағы sunset күні.

Events

`payment. captured. v2 '(өзек) және' payment. enriched. v2 '(егжей- тегжейі).
Өтпелі кезеңге продюсерден 'v1' және 'v2' келеді.


FAQ

'/v2 'қашан қажет?
Инварианттар/семантика өзгерген кезде, өрістер/әдістер жойылады, идентификаторлардың пішімі, партиялану кілті, SLA/таймингтер өзгеріп, клиенттер бұзылады.

REST бағдарламасында анық нұсқасыз өмір сүруге бола ма?
Тек ұсақ жүйелер үшін. Сыртқы интеграция үшін - айқын major-желілер жақсы.

Ескірген нұсқаны қанша уақыт сақтау керек?
Экожүйеге байланысты. Сыртқы әріптестер үшін әдетте ерте хабарлау және канарейка арқылы 6-12 ай.

Оқиғаларды нұсқалаудың API-ден айырмашылығы неде?
Оқиғалар - append-only; жаңа семантика = жаңа '.v2' және dual-emit түрі. Партияландыру кілті - келісімшарттың бір бөлігі.


Жиынтық

Нұсқалау стратегиялары - бұл процесс пен құралдар: әдепкі аддитивті эволюция, айқын major-сызықтар, capability-negotiation, dual-run және sunset. Бұған автоматты үйлесімділік, телеметрия және құжаттама тәртібін қосыңыз - және сіздің API-ларыңыз тез дамиды, «түнгі көші-қонсыз» және клиенттерде күтпеген құлдыраусыз.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.