Pular para o conteúdo

apps/api/adapter

117 · API & Integração · ≈ 5 min de estudo

Adapter

O domínio define a interface que quer usar; cada sistema externo ganha um adapter que envolve o SDK dele por composição e traduz unidades, nomes de campo, códigos e datas. O serviço de negócio só conhece a interface — trocar de fornecedor é trocar o objeto passado no construtor. Use ao integrar SDK, PSP ou adquirente cujo formato não deve vazar para o domínio.

Veja também: service-design/adapter — adapter de mão dupla para um mainframe legado.

passos
5
arquivos
4
testes
0
tecnologias
3
Lógica puraTypeScriptBunElysia
Baixar cartão

Cenário

A fintech de pagamentos cobra cartão por dois adquirentes com APIs incompatíveis. Alfa usa centavos, códigos de resultado de dois dígitos e epoch em segundos; Beta usa reais em string decimal, status em CAIXA ALTA com motivo separado e datas ISO. O checkout — que valida valor e parcelas — tem de funcionar igual com qualquer um, e um código de recusa que o adapter não conhece nunca pode virar aprovação.

Planta

Fluxo
5/5
ServicePaymentregras de parcela e valorcharge / refundcentavos, statusdo dominio, DateAdapterCardAlfaAdapterCardBetaAdquirente Alfasnake_case, centavos,result_code00/51/54, epochAdquirente BetaAmount 299.90 em string,APPROVED/DENIED, ISOInterfaceCardGatewaySdkAcquirerAlfaSdkAcquirerBeta
5

5 passos — reproduza para seguir o fluxo

Como funciona

5 passos

Converte uma interface na esperada.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    InterfaceCardGateway é do domínio: charge e refund em centavos inteiros, status do domínio (approved, declined-insufficient-funds, ...) e Date

  2. 02

    AdapterCardAlfa e AdapterCardBeta recebem o SDK do adquirente no construtor (object adapter, nunca herança) e só traduzem

  3. 03

    Reais em string ↔ centavos são convertidos dígito a dígito ("299.90" ↔ 29990), sem número de ponto flutuante no caminho

  4. 04

    Código desconhecido tem fallback explícitofailed na Alfa, declined na Beta — nunca undefined, nunca aprovado

  5. 05

    ServicePayment guarda as regras de negócio (1 a 12 parcelas, parcela mínima de R$ 5,00) e recebe o adapter pela interface

Trade-offs

O que se ganha, o que se paga

3 vantagenscada ganho tem um preço3 custos

Vantagens

  • Troca de adquirente sem mudar o checkout

  • Domínio sem convenção externa

  • Fácil substituir o gateway em teste

Custos

  • Um mapeamento por campo, por fornecedor

  • Código que um fornecedor tem e outro não precisa de decisão explícita

  • Sem disciplina, o adapter acumula regra de negócio

apps/api/adapter

4 arquivos

src/

  • gateway_card.tsInterface e tipos do domínio
  • adapter_card.tsOs dois adapters e a conversão reais ↔ centavos
  • service_payment.tsCheckout com as regras de negócio, dependente só da interface

src/acquirer_alfa.ts, src/

  • acquirer_beta.tsAs APIs HTTP dos adquirentes e seus SDKs, como vêm do fornecedor

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário
  3. bun run test# testes unitários
Requisitos
Bun
Esc

↑ ↓ navegarEnter abrir191 resultados