Dados e integrações

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
Guilherme Calesco

Autor

Guilherme Calesco

Engenheiro de software, CTO da NextApps e responsável técnico da Calesco Desenvolvimento. Atua com software desde 2008.