Adapter Pattern: como impedir que uma API externa domine seu negócio.
Um adapter traduz o contrato externo para a linguagem do produto. Ele reduz acoplamento, mas só funciona quando transformação, regra de negócio e operação continuam separadas.
Resumo prático
- O domínio deve trabalhar com seus próprios conceitos, não com o payload de cada provedor.
- Adapters concentram tradução, transporte e particularidades do contrato externo.
- Trocar de fornecedor fica mais barato quando a interface representa a necessidade do negócio.
- Um adapter mal desenhado pode esconder regras e virar apenas uma camada adicional de complexidade.
Integrações começam pequenas: um endpoint, um payload e uma chamada HTTP. Com o tempo surgem webhooks, novas versões, retentativas, estados incompatíveis e um segundo fornecedor. Quando esses detalhes entram diretamente na regra de negócio, cada mudança externa atravessa o produto inteiro.
O Adapter Pattern cria uma fronteira de tradução. A aplicação pede para cobrar, enviar ou localizar usando conceitos próprios; cada adapter converte essa intenção para o contrato específico do serviço externo.
Quando vale usar um adapter?
Use um adapter quando o sistema depende de um contrato que não controla e precisa impedir que formatos, nomes e estados externos vazem para o núcleo do produto. O valor aumenta quando existem múltiplos provedores, mudanças frequentes ou testes que não podem depender da rede.
Em uma integração simples e estável, uma camada dedicada ainda pode ser útil, mas não precisa nascer como uma hierarquia genérica. A abstração deve acompanhar uma variação real.
A interface deve representar o negócio, não o fornecedor
Se a interface repete exatamente os campos de uma API externa, o acoplamento apenas ganhou outro arquivo. Defina entradas, saídas e erros na linguagem usada pela aplicação.
O adapter recebe esse contrato interno, constrói a requisição externa, interpreta a resposta e devolve um resultado que o domínio compreende. Detalhes como headers, serialização e códigos proprietários permanecem na borda.
Entrada interna
Contém os dados necessários para a decisão do produto.
Tradução
Converte nomes, formatos, autenticação e transporte do provedor.
Saída interna
Normaliza sucesso, falha e identificadores relevantes ao domínio.
Webhooks, erros e retentativas também pertencem ao contrato
A integração não termina na resposta síncrona. Eventos recebidos precisam validar assinatura, identificar duplicidade e traduzir estados externos antes de acionar casos de uso internos.
Erros também exigem uma taxonomia útil. Timeout, rejeição definitiva e indisponibilidade temporária pedem decisões diferentes; devolver apenas “falhou” empurra complexidade para quem consome o adapter.
Teste a tradução dos dois lados da fronteira
Testes do domínio usam uma implementação controlada da interface e verificam regras sem acessar o provedor. Testes do adapter usam contratos representativos para comprovar payload, resposta, erro e webhook.
Para integrações críticas, testes de contrato e um ambiente de homologação ajudam a detectar divergências. Observabilidade deve identificar provedor, operação e categoria de falha sem registrar segredo ou dado sensível.
Sinais de que o adapter está escondendo o problema errado
Revise a fronteira quando estes comportamentos aparecerem.
Regra de negócio no adapter
Descontos, aprovação e decisões internas mudam conforme o provedor.
Interface genérica demais
Maps e objetos sem tipo apenas transportam a incerteza para outra camada.
Estado externo vazando
Toda a aplicação precisa entender códigos e nomes proprietários.
Fábrica espalhada
A escolha do provedor é repetida em vários fluxos e deixa de ser configuração controlada.
Fontes e leituras técnicas
Referências usadas para apoiar os conceitos técnicos deste artigo. Todos os links levam às publicações originais.
Próximo passo
Mudanças em APIs externas atravessam o seu sistema inteiro?
Guilherme pode mapear contratos, dependências e falhas e organizar integrações que a empresa consiga testar e operar.
Conhecer a integração de sistemasContar meu cenário diretamente
Autor
Guilherme Calesco
Engenheiro de software, CTO da NextApps e responsável técnico da Calesco Desenvolvimento. Atua com software desde 2008.
Conhecer Guilherme CalescoContinue a investigação
Tecnologia e negócio
Como traduzir decisões de tecnologia em resultados de negócio.
Ler artigoModernização de software
Refatorar ou reescrever um sistema legado?
Ler artigoArquitetura e escala
Como uma arquitetura modular permite manter um SaaS com um time enxuto.
Ler artigo