API Lifecycle

Versionamento de API

APIs mudam. O versionamento é a forma de entregar melhorias sem quebrar os clientes que já dependem de você — e como aposentar versões antigas de forma planejada.

intermediate13 min readUpdated 15 de set. de 2026
versioning.js
js
// versioning.js
app.get("/v1/posts", listPostsV1);
app.get("/v2/posts", listPostsV2);

// signal that v1 is going away
app.use("/v1", (req, res, next) => {
  res.set("Deprecation", "true");
  res.set("Sunset", "Wed, 31 Dec 2026 23:59:59 GMT");
  res.set("Link", '</v2/posts>; rel="successor-version"');
  next();
});
Breaking
Remove ou altera comportamentos
Additive
Geralmente seguro
Comum
URI versioning
Flexível
Header versioning
Aposentadoria
Deprecation e Sunset
Regra
Nunca quebre silenciosamente

Por que importa

Por que o versionamento é importante

Evolua sem quebrar

O versionamento permite melhorar a API enquanto os clientes continuam operando no contrato antigo até que migrem.

Mudanças previsíveis

Uma política clara sobre o que é considerado breaking significa que os clientes sabem quando devem agir.

Aposentadoria deliberada

Headers de deprecation e sunset transformam a remoção de uma versão antiga em um plano comunicado, não em uma surpresa.

O panorama completo

As três ideias por trás do versionamento

Saiba o que quebra os clientes, escolha uma estratégia sustentável e aposente versões seguindo um cronograma.

Compatibilidade

Classificar

Decida se uma mudança é additive e segura ou breaking e digna de uma nova versão.

Estratégia

Expor

Escolha como os clientes selecionam a versão: na URL, em um header ou no media type.

Ciclo de Vida

Aposentar

Anuncie a depreciação, defina uma data de sunset e monitore o uso antes de remover qualquer coisa.

Versionamento em resumo

As ideias centrais

URI versioning

/v1/posts, a forma mais visível e fácil de testar.

Header versioning

Um header customizado ou parâmetro Accept seleciona a versão.

Query parameter

?version=2, simples, mas fácil de esquecer.

Mudanças additive

Novos campos opcionais e endpoints raramente quebram clientes.

Deprecation

O header Deprecation sinaliza uma remoção futura.

Sunset

O header Sunset fornece a data em que a versão para de funcionar.

Uma breve historia

De APIs congeladas à evolução contínua

  1. 2000s

    URLs versionadas

    APIs públicas adotam caminhos no estilo /v1 como norma.

    2000s
  2. 2012

    Negociação via Header

    Algumas APIs movem o versionamento para headers para manter as URLs estáveis.

    12
  3. 2017

    Headers de depreciação

    Headers padronizados para deprecation e sunset ganham tração.

    17
  4. 2020s

    Evolução contínua

    Mudanças additive e retrocompatíveis reduzem a necessidade de subir a versão.

    2020s
  5. Hoje

    Política explícita

    APIs maduras documentam o que é considerado breaking e quanto tempo as versões vivem.

    Hoje

O guia completo

Versionamento de API: Tudo que voce precisa saber

Por que o versionamento é importante

Uma API é uma promessa. Uma vez que os clientes dependem dela, alterá-la descuidadamente quebra as aplicações deles, e clientes com erros custam caro para todos. O versionamento é a maneira de entregar melhorias enquanto oferece aos clientes um contrato estável e um caminho claro para a migração.

O objetivo não é evitar mudanças. É tornar a mudança previsível: saber quais alterações são seguras, expor as versões de forma consistente e aposentar as antigas seguindo um cronograma comunicado, em vez de surpreender as pessoas.

Mudanças disruptivas versus aditivas

A maior parte da dor no versionamento vem da falta de classificação das mudanças. Comece com uma regra clara.

Geralmente seguras (aditivas):

  • Adicionar um novo campo opcional a uma resposta.
  • Adicionar um novo endpoint.
  • Adicionar um novo parâmetro de requisição opcional.
  • Adicionar um novo valor de enum, desde que os clientes tolerem valores desconhecidos.

Disruptivas (exigem nova versão):

  • Remover ou renomear um campo.
  • Alterar o tipo ou formato de um campo.
  • Tornar um parâmetro opcional em obrigatório.
  • Alterar o significado ou o padrão de um comportamento existente.
  • Alterar códigos de status ou a estrutura de erros dos quais os clientes dependem.

Projetar clientes para ignorar campos desconhecidos é a melhor maneira de manter as mudanças aditivas seguras. Documente essa regra para que ninguém precise adivinhar.

Estratégias de versionamento

Existem quatro formas comuns de permitir que os clientes selecionem uma versão.

Versioning via URI — a versão faz parte do caminho (path).

GET /v1/posts
GET /v2/posts

É visível, fácil de rotear, fácil de fazer cache e fácil de testar no navegador. É a escolha mais comum para APIs públicas, embora puristas argumentem que a URL não deveria mudar.

Versioning via Header — um header customizado seleciona a versão.

GET /posts
X-API-Version: 2

As URLs permanecem estáveis, o que é ótimo para cache por recurso, mas a versão fica invisível em logs, links e testes de navegador.

Versioning via Media-type — a negociação de conteúdo (content negotiation) seleciona a versão.

GET /posts
Accept: application/vnd.example.v2+json

Esta é a abordagem mais alinhada ao REST e se integra à negociação de conteúdo, mas é a mais difícil de descobrir e depurar.

Query parameter?version=2. Simples, mas fácil de omitir e problemático para cache.

Independentemente de qual você escolha, aplique-a de forma consistente e documente-a. Misturar estratégias é pior do que escolher uma menos popular.

Depreciação e sunset

Remover uma versão deve ser um processo, não um evento.

Deprecation: true
Sunset: Wed, 31 Dec 2026 23:59:59 GMT
Link: </v2/posts>; rel="successor-version"
  • Depreciação anuncia que uma versão ou endpoint será removido.
  • Sunset define a data exata em que ele deixará de funcionar.
  • Link aponta para a substituição.

Combine os headers com um guia de migração, entradas no changelog e comunicação direta com os usuários mais ativos. Em seguida, monitore o uso: se uma parcela significativa do tráfego ainda estiver na versão antiga próximo à data de sunset, estenda o prazo em vez de quebrar esses clientes.

Executando versões lado a lado

Suportar duas versões significa que o código deve atender a ambas. Abordagens comuns:

  • Handlers versionados que mapeiam para serviços compartilhados, para que a lógica de negócio permaneça em um único lugar.
  • Adapters que traduzem a representação antiga para a nova.
  • Feature flags para a implementação gradual de novos comportamentos.
  • Specs separadas por versão, geradas e publicadas junto com a API.

Mantenha a diferença entre as versões pequena. Forks extensos de lógica são difíceis de manter e propensos a divergências.

Comunicando mudanças

O versionamento só funciona se os clientes souberem o que está acontecendo.

  • Publique um changelog e marque as breaking changes de forma clara.
  • Mantenha uma OpenAPI spec atualizada para cada versão.
  • Envie avisos de depreciação nos headers e, sempre que possível, por e-mail.
  • Forneça um guia de migração com exemplos de “antes e depois”.
  • Ofereça uma janela de suporte que seja compatível com os ciclos de release dos seus usuários.

Melhores práticas

  • Classifique cada alteração como aditiva ou breaking change antes de publicá-la.
  • Prefira alterações aditivas; incremente a versão apenas quando for estritamente necessário.
  • Escolha uma estratégia de versionamento e utilize-a em todo o projeto.
  • Nunca remova um campo ou endpoint sem um período de depreciação.
  • Anuncie a depreciação através de headers e com uma data de encerramento (sunset date).
  • Monitore o tráfego por versão antes de descontinuar qualquer uma.
  • Mantenha a lógica compartilhada atrás de adaptadores específicos de cada versão.

Erros comuns

  • Quebrar clientes silenciosamente ao alterar a estrutura de uma resposta.
  • Versionar cada pequena alteração, criando um fardo de manutenção.
  • Misturar estratégias de versionamento na mesma API.
  • Remover uma versão sem aviso prévio ou sem um caminho de migração.
  • Deixar versões antigas rodando indefinidamente sem um plano de desativação.
  • Esquecer de atualizar a documentação e as especificações de cada versão.

Próximos passos

O versionamento é o que permite que uma API sobreviva ao contato com clientes reais. Baseie-se em um design REST limpo, descreva cada versão com OpenAPI e utilize HTTP headers para comunicar a depreciação. Em seguida, escreva uma política de uma página para a sua própria API: o que é considerado uma mudança disruptiva (breaking change) e qual a vida útil de cada versão.

Fazendo uma mudança

Adicionar um campo opcional geralmente é seguro. Renomear ou remover um campo, ou alterar um tipo, quebra clientes e exige uma nova versão.

Additive
{
  "id": "42",
  "title": "Hello",
  "tags": []
}
// new optional field,
// existing clients unaffected
Breaking
{
  "id": "42",
  "headline": "Hello"
}
// "title" removed;
// every client breaks

Selecionando uma versão

URI versioning é explícito, cacheável e fácil de testar. Header versioning mantém as URLs estáveis, mas é mais difícil de visualizar e compartilhar.

URI
GET /v2/posts
Accept: application/json
Header
GET /posts
Accept: application/vnd.example.v2+json

Trade-offs

Deves versionar sequer?

O versionamento é uma rede de segurança, não um objetivo. Projeta primeiro para a compatibilidade e só recorras a uma nova versão quando uma alteração quebra mesmo os clientes.

Strengths

  • Protege os clientes existentes

    Uma nova versão permite lançar melhorias disruptivas enquanto os clientes antigos continuam a funcionar até migrarem ao seu ritmo.

  • Impõe uma política clara

    Decidir o que conta como disruptivo torna o contrato explícito e mantém as equipas honestas quanto à compatibilidade.

  • Permite um fim deliberado

    Cabeçalhos de depreciação e sunset transformam a remoção de uma versão antiga num plano comunicado e monitorizado.

Trade-offs

  • Cada versão tem um custo

    Cada versão suportada multiplica testes, documentação e manutenção, por isso as antigas têm de ser retiradas segundo um calendário.

  • Fragmenta o ecossistema

    Clientes, documentação e SDKs dividem-se entre versões, e as perguntas de suporte tornam-se mais difíceis de responder.

  • Muitas vezes evitável

    Alterações aditivas e retrocompatíveis cobrem a maioria das necessidades, por isso o versionamento pode tornar-se um hábito que ultrapassa as ruturas reais.

Perguntas frequentes

Perguntas frequentes

Keep learning

Related topics from the roadmap.

$ comecar a aprender

Pronto para aprender API Versioning?

Nosso tutorial interativo te guia por API Versioning passo a passo — com quizzes e codigo real que voce pode executar no navegador.