1 de Março de 2025
Como desenhar integração com serviço terceiro
Como integrar com fornecedor externo sem espalhar contrato alheio pelo sistema inteiro nem deixar cada mudança deles virar incidente seu.
Andrews Ribeiro
Founder & Engineer
4 min Intermediario Sistemas
Trilha
Trilha para entrevistas de startup engineer
Etapa 8 / 11
O problema
Serviço terceiro costuma entrar no sistema com uma promessa simples:
- cobrar pagamento
- validar documento
- mandar email
- enriquecer dado
No início parece só mais uma chamada HTTP.
Meses depois, o time descobre que metade do próprio fluxo agora fala a língua do fornecedor.
Quando isso acontece, qualquer mudança externa vira problema interno:
- campo mudou
- limite apertou
- latência piorou
- webhook atrasou
- status veio diferente
Refem não e só quem depende.
E quem depende sem fronteira clara.
Modelo mental
Integração com serviço terceiro deveria responder a esta pergunta:
como eu uso essa capacidade externa sem deixar meu sistema assumir a forma dela?
Isso leva para quatro ideias:
- o contrato do fornecedor deve ficar contido
- falha do fornecedor não pode contaminar tudo
- seu dominio precisa continuar falando sua própria linguagem
- troca ou mudança de fornecedor não deveria exigir reescrita geral
Quebrando o problema
Não espalhe o contrato do fornecedor
Erro clássico:
- response do terceiro entra
- nomes deles viram nomes seus
- status deles viram status de negócio seu
- payload deles atravessa várias camadas
Quando isso acontece, o sistema deixa de integrar e passa a incorporar o fornecedor.
Melhor desenho:
- uma camada interna conversa com o terceiro
- ela traduz o contrato externo para um modelo seu
- o resto do sistema depende do modelo interno
Isso parece burocracia só até a primeira mudança externa.
Trate o fornecedor como dependência instável
Mesmo fornecedor bom pode:
- ficar lento
- devolver erro parcial
- responder fora de ordem
- impor rate limit
- mudar comportamento
Entao integração madura costuma ter:
- timeout
- retry com critério
- circuit breaker
- idempotencia quando a operação e sensivel
- observabilidade de falha e latência
Não porque o fornecedor e ruim.
Porque dependência externa e, por natureza, menos controlavel.
Seu dominio precisa continuar seu
Se o fornecedor chama estados de pagamento de um jeito e seu negócio de outro, não copie sem pensar.
Exemplo:
- fornecedor:
authorized,captured,voided - seu negócio:
aguardando_confirmacao,pago,cancelado
Essas coisas podem se relacionar, mas não precisam ser a mesma tabela mental.
Se você cola uma na outra cedo demais, a regra de negócio passa a obedecer sem querer a semântica de fora.
Fallback precisa ser honesto
Quando o terceiro falha, as opcoes comuns sao:
- degradar funcionalidade
- enfileirar para tentar depois
- mostrar erro claro
- usar cache onde fizer sentido
O importante e não inventar sucesso falso.
Exemplo ruim:
- fornecedor de pagamento caiu
- sistema marca como pago “para não travar UX”
Isso não e resiliencia.
E criação de problema adiado.
Exemplo simples
Imagine uma integração com provedor de frete.
Fluxo ruim:
- frontend chama seu backend
- backend chama o provedor
- a resposta do provedor volta quase crua para dentro do seu dominio
- vários módulos passam a depender dos nomes, erros e status dele
Se o provedor troca um campo ou atrasa forte, tudo sente.
Fluxo melhor:
- seu backend chama um adaptador interno de frete
- o adaptador conversa com o provedor
- ele traduz response e erro para um modelo interno
- seu sistema entende
cotacao_disponivel,cotacao_indisponivel,reprocessar_depois
Agora o fornecedor continua importante.
Mas não dita a forma de todo o seu sistema.
Erros comuns
- Espalhar payload externo pelo sistema inteiro.
- Confiar em fornecedor como se fosse módulo interno seu.
- Não ter timeout e deixar request pendurada.
- Mapear estado de negócio diretamente para status do vendor.
- Tratar troca de fornecedor como impossivel porque o acoplamento já foi total.
Como um senior pensa
Quem tem mais experiência olha para serviço terceiro e pensa:
“Eu quero usar a capacidade dele, não terceirizar o desenho do meu dominio.”
Essa frase resume bem o objetivo.
Integração boa aceita dependência sem entregar a chave da casa.
O que o entrevistador quer ver
Em entrevista, esse tema costuma aparecer quando pedem desenho de integração externa.
O avaliador quer ver se você pensa em fronteira, risco e evolução.
Sinais bons:
- você fala de camada adaptadora
- menciona timeout, retry e circuit breaker
- separa semântica do fornecedor da semântica do negócio
- fala de observabilidade e fallback
Uma resposta forte costuma soar assim:
“Eu isolaria o contrato do terceiro atras de uma camada minha, com timeout, retry e tradução para modelo interno. Assim eu reduzo acoplamento e consigo lidar melhor com falha ou mudança do fornecedor.”
Integração saudavel usa terceiro como dependência. Integração ruim promove o terceiro a coautor do seu sistema.
Resumo rápido
O que vale manter na cabeça
- Integração boa com terceiro isola o contrato externo em vez de espalhar a linguagem do fornecedor pelo sistema todo.
- Seu sistema precisa continuar explicavel quando o terceiro falha, muda comportamento ou limita tráfego.
- Adapter, timeout, retry, circuit breaker e observabilidade valem mais do que otimismo.
- Quanto menos seu dominio depender da forma exata do fornecedor, menos refem você vira.
Checklist de pratica
Use isto ao responder
- Consigo explicar por que contrato de terceiro deve ficar atras de uma camada interna?
- Sei dizer como tratar timeout, erro, rate limit e indisponibilidade?
- Consigo descrever fallback ou degradação sem inventar comportamento perigoso?
- Sei falar de mudança de fornecedor sem imaginar reescrita do sistema inteiro?
Você concluiu este artigo
Parte da trilha: Trilha para entrevistas de startup engineer (8/11)
Próximo passo
Como Fazer Rollout Gradual Com Controle Próximo passo →Compartilhar esta página
Copie o link manualmente no campo abaixo.