GH GambleHub

Estratégias de versionização da API

Por que precisa de versionização

A API muda mais rapidamente do que os clientes. A versionização permite a produção de fichas e a correção de erros sem falhas de integração, define o ritual de mudanças e torna a evolução previsível. Chave: alterações aditivas padrão, majors - apenas para quebra, verificações automáticas de compatibilidade e políticas sunset elaboradas.


Princípios básicos

1. Aditivo-first: novos campos/métodos/eventos opcionais - ok; remoção e alteração de significado - maior.
2. O MGC (contrato mínimo de garantia) está estável; enriquecimento - através de capabilities/'? incluse = '.
3. Tolerant reader: Os clientes ignoram campos desconhecidos e sobrevivem corretamente às extensões do enum.
4. Semantic Versioning: `MAJOR. MINOR. PATCH 'para artefatos, SDK e eventos.
5. Automate: schema-diff, linteres e testes CDC bloqueiam alterações breaking.


Onde armazenar versão (mecânicos de direcionamento)

REST/HTTP

Versão URI: '/v1/orders '→ apenas routar, confortavelmente em passarelas. Menos - «apagar» a evolução das representações.
Midiatip/cabeçalho: 'Accept: aplicação/vnd. example. orders. v1 + json '- controle exato do formato; É mais difícil de fazer.
Versão query: '? api-versão = 1' - conveniente para A/B, mas fácil de perder em cajas/logs.
Recomendação: URI para as linhas major + função/capability flags e conteúdo-negacionado para extensões menores.

gRPC / Protobuf

Pacotes/serviços: 'package payments. v1; service PaymentsV1; '- linhas claras.
A numeração de formatação está inalterada; marcas de formatação remotas não podem ser reutilizadas.
Novos campos - 'optional'; breaking → novo '.v2'.

GraphQL

Esquema sem major explícito no URL. Evolução através de @ deprecated e janelas de migração; O maior é um novo esquema de endpoint.
Controlar complexity/depth faz parte do contrato.

Event-driven (Kafka/NATS/Pulsar)

O nome do evento é 'payment. authorized. v1 'é uma versão do tipo.
Registro de esquema (Avro/JSON Schema/Protobuf) com modos de compatibilidade (BACKWARD/FORWARD/FULL).
Major → dual-emit 'v1' e 'v2' por um período de transição.


Modelo de versão e política de alterações

Semantic Versioning

MAJOR - Alterações quebrantes: remoção/renomeamento de campos, mudança de chaves de partilha, outro significado de estatais, validação mais rigorosa.
MENOR - Adutoras: novos campos opcionais/endpoint/eventos, novos valores enum para tolerant-reader.
PATCH - correções sem alteração de contrato e semântica.

Deprecation & Sunset

Marcar obsoleto ('Deprecated: true', '@ deprecated'), publicar uma data sunset, alternativa e migração.
Em HTTP, títulos de «Sunset», «Deprecation»; em eventos - individual '.deprecation. notice`.
Conduza a telemetria usage para decidir sobre a retirada.


Estratégias de versões por estilo

REST

Linhas Maiores em/v1 ,/v2.
MENOR: extensão dos circuitos, '? fields =', '? incluse ='; extensões enum seguras.
ETAG/If-Match e Idumpotent POST para coerência sem quebra.
Erros - Formato estável ('tipo', 'código', 'trace _ id').

gRPC

Introduza novos serviços/métodos para quebrar: 'PaymentsV2. Capture`.
Os estados de erro e a semântica deadline fazem parte do contrato; alteração → novo método/serviço.
Use a linha de mensagens e não a mude para menor.

GraphQL

Adicione campos e tipos livres; remoção através de '@ deprecated' + janela de migração; grande redisine → novo esquema ('/graphql-v2 ').
Introspecção e descrições - must-have para a migração de clientes.

Events

Core vs enriched: o núcleo é estável, o enriquecimento vive perto e é versionizado separadamente.
A chave de partilha está inalterada dentro da linha maior.
Migração Major - 'dual-emit' + migração de projeções/consoadores.


Negotion e capability-bandeiras

Capabilities: o cliente envia 'X-Capabilities: risk _ score, price _ v2'; o servidor responde com uma representação avançada.
Preferer (HTTP) e "hints' para respostas parciais.
Em socks/striptease, uma mensagem handshake com uma lista de extensões suportadas.


Lançamento de versões maiores sem dor

1. RFC/ADR: Por que você precisa de um major que está quebrando, matriz de risco.
2. Dual-run: lançamento paralelo de 'v1' e 'v2' (publicação dupla de eventos, dois gateway roots, espelhamento de tráfego).
3. Adaptadores de migração proxy/translatores 'v1↔v2' para clientes pesados.
4. Canário: por grupo de clientes/topics/marcas em gateway.
5. Plano sunset: datas, comunicações, estandes, dados de teste, monitoramento do uso.


Os papéis da plataforma e da infraestrutura

API Gateway/Service Mesh: roteiro em versão, cabeçalhos, caminhos; rate-limit и auth per-version.
Schema Registry & Catalog: Fonte de verdade para speck/diagramas com histórico de difs.
CI/CD: линтеры (Spectral, Buf), schema-diff (OpenAPI-diff, Buf breaking), CDC (Pact).
Observabilidade: a versão deve entrar em logs/trailers/métricas.


Teste de versões

Schema-diff em PR: bloquear breaking.
Consumer-Driven Contracts: O provedor é testado contra contratos de consumidores reais.
Golden sample: respostas de referência para versões.
E2E-canário: comparação p95/p99, erros e temporizações entre as versões.
Replay para eventos: as projeções são repetidas para v2 sem discrepâncias.


Migração de dados e bases de dados

Para REST/gRPC: as migrações de BD são coordenadas por meio de «expand-and-contract» (adicione uma coluna → comece a escrever → alterna a leitura → afaste a antiga).
Para Events: dual-emit e migração de consoadores; às vezes, reaproximar o loga para novas projeções.
Não façam «grandes explosões».


Relação de segurança

Scopes per version: individuais OIDC-scopes/papéis para v1/v2.
Segredos/claim's token - parte do contrato; o seu turno = major.
PII/PCI - Não estenda o payload sem necessidade; novos campos - com o mínimo de privilégios.


Antipattern

Swagger-wash: especificação atualizada, servidor não (ou vice-versa).
Reutilizar as marcas protobuf é um estrago silencioso de dados.
Mudança de sentido enum sem maior.
Global '/v2 'por cosméticos, versão sem quebra.
Esqueceu-se de sunset/usage-métricas: não é possível remover a versão antiga de forma segura.
Um top comum para diferentes maiores é misturar ordem e chave.


Folha de cheque antes do lançamento

  • As alterações são aditivas ou uma linha maior diferente foi preparada.
  • Linteres e schema-diff verdes (breaking não passou).
  • SDK/exemplos/documentação atualizados, notas de rodapé sobre compatibilidade.
  • Ativado tolerant reader nos clientes; enum-fallback testado.
  • Para major - plano dual-run, adaptadores, canário, datas sunset e correio.
  • As métricas/logs/trailers contêm a versão e a segmentação.
  • Há um estande e kits golden para comparar v1↔v2.
  • Para eventos - registro de esquema no modo BACKWARD/FULL, as chaves de partilha estão inalteradas.

Exemplos de modelos

REST (URI + negotiation)

Rota: '/api/v2/orders/se

Заголовок: `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);
}
💡 Em v1 - Marca a descrição da descrição e a data sunset na documentação.

Events

`payment. captured. v2 '(núcleo) e' payment. enriched. v2 '(peças).
Durante o período de transição, a produtora vai «v1» e «v2».


FAQ

Quando precisas de «/v2 »?
Quando os invariantes/semânticos mudam, os campos/métodos são removidos, o formato dos identificadores é alterado, a chave de partilha, o SLA/timing para que os clientes sejam quebrados.

Podemos viver sem uma versão explícita no REST?
Só para sistemas pequenos. Para as integrações externas, as linhas maiores aparentes são melhores.

Qual o prazo para manter a versão ultrapassada?
Depende do ecossistema. Para parceiros externos, normalmente 6-12 meses com aviso precoce e canário.

Em que a versionização de eventos difere da API?
Eventos - append-only; nova semântica = novo tipo '.v2' e dual-emit. A chave de partilha faz parte do contrato.


Resultado

As estratégias de versioning são um processo e ferramentas: evolução aditiva padrão, linhas de maior clareza, capability-negotion, dual-run e sunset. Adicione as verificações automáticas de compatibilidade, telemetria de uso e disciplina de documentação - e suas APIs vão evoluir rapidamente, sem «migrações noturnas» e baixas inesperadas nos clientes.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.