Guia para definir contrato de API e gerar documentação automática com OpenAPI e Swagger
Por Kevin Marcondes · Publicado em · Atualizado em · 8 min de leitura
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 APIVeja também
- Guia: checklist de pré‑deploy e plano de rollback rápido para aplicações PHP em produção
- Checklist de segurança para pipelines CI/CD com runners self‑hosted e secrets management
- Guia: centralização de logs com Fluentd e Elasticsearch para aplicações PHP em VPS
- Guia: organizar migrations e rollbacks em PostgreSQL para equipes pequenas