Pular para o conteúdo

apps/api/api-gateway

113 · API & Integração · ≈ 6 min de estudo

API Gateway

Ponto de entrada único para os serviços internos: toda requisição passa pela mesma cadeia ordenada — rate limit, autenticação, roteamento, autorização, circuit breaker e proxy com timeout — e o cliente nunca conhece o endereço de nenhum serviço. Use quando três ou mais serviços atendem os mesmos clientes externos e autenticação, limite e log precisam ser iguais em todos.

passos
6
arquivos
5
testes
0
tecnologias
4
Lógica puraTypeScriptBunElysiaJOSE
Baixar cartão

Cenário

O banco expõe contas, pagamentos e transferências para o app e para parceiros. Cada app cliente tem uma API key (cota de 5 chamadas por minuto na demo) e um JWT com escopos (accounts:read, payments:write). Os serviços internos confiam no x-subject que só o gateway escreve. Quando o serviço de transferências trava, o gateway corta a espera em 1 segundo e, após três falhas seguidas, para de chamá-lo por 10 segundos.

Planta

Sequência
9/9
GET /accounts/0001/balance (x-api-key, Bearer JWT)11. rate limit por API key (429)22. valida JWT HS256, issuer e audience (401)33. prefixo para upstream (404)44. escopo accounts:read (403)55. circuit breaker do upstream (503)66. proxy com timeout, x-subject e x-request-id, sem o token7resposta (ou timeout: 504)8resposta com x-request-id9App do clienteGatewayServico interno
9

9 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Entrada única que roteia e protege.

Esconde cada passo: lembre antes de tocar para revelar.

Vocabulário compartilhado

  1. 01

    Rate limit antes de tudo, por API key, em janela deslizante: cliente bloqueado não custa verificação de assinatura

  2. 02

    Autenticação e autorização são etapas separadasJWT válido responde "quem é"; o escopo <upstream>:read|write responde "o que pode"

  3. 03

    O primeiro segmento do caminho escolhe o upstream; prefixo desconhecido é 404

  4. 04

    O gateway remove authorization e qualquer x-subject do cliente e escreve o seu, com um x-request-id novo que volta na resposta

  5. 05

    Proxy com AbortSignal.timeout: upstream que não responde vira 504; três falhas seguidas abrem o breaker daquele upstream (503 imediato) até a tentativa de teste

  6. 06

    Cada requisição gera uma linha de log JSON com request id, cliente, status e duração

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Autenticação, limite e log iguais para todos os serviços

  • Topologia interna oculta do cliente

  • Serviço lento não prende o gateway

  • Serviços confiam num sujeito que o cliente não forja

Custos

  • Ponto único de falha: exige várias instâncias

  • Um hop a mais em toda requisição

  • Contador em memória só vale com uma instância; com várias, Redis

  • Regra de negócio no gateway o transforma em BFF

apps/api/api-gateway

5 arquivos

src/

  • gateway.tsA cadeia ordenada e o proxy
  • auth_gateway.tsAutenticação JWT, escopo exigido por verbo e emissão de token para demo e teste
  • rate_limit_gateway.tsJanela deslizante por API key
  • breaker_gateway.tsCircuit breaker por upstream
  • service_upstream.tsServiços internos que ecoam o que receberam, e um upstream que trava

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