Guia para definir contrato de API e gerar documentação automática com OpenAPI e Swagger

Por · Publicado em · Atualizado em · 8 min de leitura

folhas de plantas e desenhos técnicos impressos, parcialmente enroladas
Metáfora visual para contratos e especificações técnicas Foto: jarmoluk / Pixabay

Este guia para definir contrato de API e gerar documentação automática com OpenAPI e Swagger mostra, passo a passo, como padronizar endpoints, erros e segurança. Você vai ver estrutura de OpenAPI 3.x, modelos de resposta, estratégias de versionamento e como publicar documentação viva sem esforço manual.

Contrato de API: conceito e benefícios práticos

Contrato de API é a especificação que descreve, com precisão, como clientes e servidores interagem. Ele detalha endpoints, payloads, erros e requisitos de segurança. Ter um contrato reduz ambiguidades e acelera a integração entre equipes e sistemas.

Com um contrato claro, você evita quebras ao lançar novas versões. Também ganha base para validar requests e responses automaticamente. Ferramentas conseguem gerar mocks, clientes e servidores a partir do contrato, reduzindo retrabalho.

A documentação deixa de ser um documento estático. Com OpenAPI, ela acompanha o código. Mudanças viram pull requests revisáveis, melhorando a governança do seu ecossistema de APIs.

  • Menos retrabalho entre back-end e consumidores.
  • Padronização de erros e status HTTP.
  • Validação automática de esquemas em CI/CD.
  • Geração de clients/SDKs e mocks a partir do contrato.

OpenAPI em resumo: versões, estrutura e boas práticas

OpenAPI 3.x é o padrão mais usado para descrever APIs HTTP. Uma especificação típica contém metadados, servidores, caminhos, operações, schemas e componentes reutilizáveis. Ela pode ser escrita em YAML ou JSON.

Organize o documento usando componentes para schemas, parâmetros, respostas e cabeçalhos. Isso evita duplicação. Mantenha exemplos reais de entrada e saída. Bons exemplos são parte essencial da documentação viva.

Adote convenções de nomes. Use camelCase ou snake_case de forma consistente. Defina formatos de datas, números e identificadores. Documente limites, paginação e ordenação para cada recurso.

  • Use components/schemas para modelos reusáveis.
  • Inclua examples e exemplos negativos (erros).
  • Centralize enumerações e mensagens padrão.
  • Adote tags para agrupar endpoints por domínio.

Modelando endpoints REST: recursos, verbos e status

Pense em recursos antes de endpoints. Reflita entidades e relações do seu domínio. Use substantivos no plural e identifique recursos por IDs. Mantenha rotas previsíveis e verbos HTTP coerentes com a ação.

Idempotência importa. GET, PUT e DELETE devem ser idempotentes. POST cria recursos. PATCH aplica mudanças parciais. Defina paginação e filtros via query parameters. Documente limites e ordenação aceitos.

Se estiver avaliando outro estilo, como GraphQL, veja o nosso comparativo GraphQL vs REST para entender impactos em contratos e integrações.

  • GET /orders, POST /orders, GET /orders/{id}.
  • Use 200/201 para sucesso, 202 para processamento assíncrono.
  • Prefer 204 quando não há corpo na resposta.
  • Use 400 para validação, 401/403 para autenticação e autorização.
  • Propague 429 quando houver rate limiting.

Schemas, validações e erros padronizados

OpenAPI usa JSON Schema para descrever estruturas de dados. Defina tipos, formatos, campos obrigatórios e limites. Use enums para valores controlados. Explique campos de data, moedas e identificadores com descrições claras.

Padronize o modelo de erro. Uma abordagem é inspirar-se em Problem Details (problem+json). Estruture campos como type, title, detail, code, traceId e violations para erros de validação.

Inclua exemplos de erros por cenário: validação, negócio e downstream. Documente códigos específicos por regra de negócio. Isso ajuda front-ends e integrações a tratar falhas de forma consistente.

  • Descreva ranges numéricos com minimum/maximum.
  • Marque campos obrigatórios em required.
  • Use oneOf/anyOf para variações de payload.
  • Inclua pattern para validar formatos customizados.

Autenticação, autorização e versionamento

Modele securitySchemes no OpenAPI. Descreva OAuth2, API Keys, ou mTLS, conforme o caso. Documente escopos, fluxos de autorização e cabeçalhos. Indique quais operações exigem autenticação.

Para políticas de segurança aprofundadas, veja o guia de APIs seguras com OAuth2 e rate limiting. Integre requisitos como escopos mínimos, limites por cliente e práticas de rotação de credenciais.

Planeje versionamento desde o início. Defina como versões serão representadas, prazos de depreciação e regras de compatibilidade. Documente breaking changes e caminhos de migração para consumidores.

  • Estratégias de versão: URL (/v1), cabeçalho (Accept-Version) ou media type (application/vnd.suaapi+json;v=1).
  • Padronize mensagens de depreciação e sunset headers.
  • Separe permissões por escopos e documente por operação.

Documentação automática: Swagger UI e alternativas

Com um arquivo OpenAPI, você publica documentação automática. Swagger UI renderiza endpoints, parâmetros, exemplos e permite executar chamadas. Outras opções geram UIs rápidas e navegáveis a partir do mesmo contrato.

Escolha a ferramenta considerando facilidade de hospedagem, suporte a temas, busca, versão múltipla e try-it-out. Abaixo, um comparativo objetivo para orientar a decisão.

Ferramenta Origem do schema Recursos de UI Quando usar
Swagger UI OpenAPI 3.x Try-it-out, temas simples, hospedagem estática Start rápido, documentação interativa básica
ReDoc OpenAPI 3.x Navegação em árvore, layout limpo, search Docs legíveis para grandes contratos
Stoplight Elements OpenAPI 3.x Try-it-out, navegação rica, theming Portais com design mais avançado
Redocly OpenAPI 3.x Portal completo, versão múltipla, plugins Governança e documentação enterprise
Postman Docs OpenAPI 3.x/Collections Exemplos executáveis, ambiente Postman Times que já usam collections Postman

Integrando o contrato ao fluxo: CI/CD, mocks e testes

Adote contract-first quando possível. O contrato guia a implementação e facilita alinhamento. Em code-first, gere e valide o OpenAPI na pipeline. O essencial é manter o contrato como fonte de verdade revisada por pull requests.

Automatize checagens em CI/CD: lint do OpenAPI, validação de exemplos, compatibilidade retroativa e geração de artefatos. Integre com pipelines como o descrito em CI/CD com GitHub Actions.

Inclua testes de contrato e mocks para consumidores. Simule respostas conforme o OpenAPI. Em revisões de código, avalie segurança e erros. Quando necessário, faça uma auditoria de código focada em endpoints críticos.

  • Lint do OpenAPI (nomenclatura, schemas e exemplos).
  • Validação request/response em teste de integração.
  • Teste de compatibilidade: detectar breaking changes.
  • Geração automática de SDKs por linguagem.
  • Publicação da doc em cada PR e ambiente.

Passo a passo inicial e checklist de governança

Comece pequeno, mas completo. Escolha um domínio, mapeie recursos e versões, escreva contratos com exemplos, publique a doc e integre validações ao CI. Com feedback, evolua padrões e componha um style guide interno.

Formalize governança: revisão por pares, convenções de nomes, catálogo de APIs, ciclo de depreciação e política de compatibilidade. O objetivo é previsibilidade para consumidores e segurança para o time.

  • Defina objetivos de negócio da API.
  • Mapeie recursos, relacionamentos e limites.
  • Escolha estilo de paginação e ordenação.
  • Escreva o OpenAPI com components reutilizáveis.
  • Modele autenticação e escopos por operação.
  • Padronize erros e códigos de negócio.
  • Publique a documentação automática.
  • Automatize lint, validação e compatibilidade.

Perguntas frequentes

Contrato-first ou code-first: qual escolher?

Contrato-first favorece alinhamento entre equipes e documenta requisitos desde o início, guiando implementações e permitindo geração de mocks/SDKs. Code-first é útil quando já existem endpoints e é necessário gerar o OpenAPI a partir do código. Independentemente da abordagem, trate o contrato como fonte de verdade e revise mudanças por pull requests para manter governança.

Como manter OpenAPI sincronizado com o código?

Coloque o arquivo OpenAPI no repositório, junto ao código, e gere a documentação em cada commit. Automatize validações em CI para lint, checks de exemplos e compatibilidade entre contrato e implementação. Bloqueie deploys que quebrem compatibilidade sem versionamento ou documentação da mudança, mantendo o contrato como artefato revisado em pull requests.

OpenAPI funciona com GraphQL ou gRPC?

OpenAPI descreve APIs HTTP no estilo REST; GraphQL e gRPC usam seus próprios formatos (SDL/introspecção e Protobuf/.proto, respectivamente). É possível documentar gateways HTTP que exponham GraphQL ou traduzam gRPC para HTTP, mas o contrato raiz de cada tecnologia segue seu padrão específico, não o OpenAPI diretamente.

Como lidar com breaking changes na API?

Evite remover campos ou alterar significados; quando uma mudança for incompatível, crie uma nova versão da API e documente claramente as alterações. Publique prazos de depreciação, mantenha compatibilidade por um período útil e forneça guias de migração. Comunique consumidores com antecedência e registre todas as mudanças na documentação e no catálogo de APIs.

Preciso do Swagger para usar OpenAPI?

Não. Swagger UI é uma opção popular para renderizar e testar contratos OpenAPI, mas há alternativas como ReDoc ou portais dedicados. O elemento essencial é manter o arquivo OpenAPI atualizado e publicar a documentação de forma acessível aos consumidores, com exemplos, try‑it‑out quando aplicável, e versão da documentação alinhada ao ciclo de release.

Quer padronizar contratos e publicar documentação viva?

Se você precisa sair do improviso e adotar OpenAPI com documentação automática, podemos discutir seu cenário e traçar um plano prático de implantação.

Falar sobre seu contrato de API

Veja também