DEV Community

Vinícius Carregosa
Vinícius Carregosa

Posted on

API Gateway: arquitetura, responsabilidades e gerenciamento de tráfego

À medida que uma aplicação evolui, sua arquitetura pode deixar de concentrar todas as funcionalidades em um único backend e passar a distribuir responsabilidades entre diferentes serviços.

Essa organização permite que componentes sejam desenvolvidos, implantados e escalados de maneira independente. Entretanto, também introduz novos desafios relacionados à comunicação, segurança, gerenciamento de tráfego e integração entre sistemas.

Imagine uma aplicação que depende de diferentes serviços para disponibilizar suas funcionalidades:

  • Serviço de usuários;
  • Serviço de autenticação;
  • Serviço de pagamentos;
  • Serviço de pedidos;
  • Serviço de notificações.

Nesse cenário, como o cliente deve se comunicar com todos esses componentes? Deve conhecer individualmente os endereços de cada serviço? Como centralizar políticas de segurança e controlar o acesso às diferentes partes da aplicação?

Uma das soluções arquiteturais utilizadas para lidar com esses desafios é o API Gateway.

Ele atua como um ponto de entrada para as APIs de uma arquitetura, recebendo requisições dos clientes e encaminhando-as aos serviços responsáveis pelo processamento.

Entretanto, sua função não se limita ao encaminhamento de requisições. Um API Gateway pode concentrar diferentes responsabilidades relacionadas à segurança, observabilidade, gerenciamento de tráfego e integração entre sistemas.

Compreender seu funcionamento é fundamental para entender como aplicações distribuídas organizam e controlam sua comunicação.

1. O que é um API Gateway?

Um API Gateway é um componente arquitetural responsável por intermediar a comunicação entre clientes e serviços de backend.

Ele funciona como uma camada de entrada para as APIs, recebendo requisições, aplicando políticas configuradas e encaminhando cada solicitação ao serviço correspondente.

Em uma arquitetura sem Gateway, o cliente pode precisar conhecer diretamente os endereços dos diferentes serviços.

             Cliente
                |
       +--------+--------+
       |        |        |
       v        v        v
   Usuários  Pedidos  Pagamentos
    Service  Service   Service
Enter fullscreen mode Exit fullscreen mode

Nesse modelo, o cliente precisa conhecer os diferentes pontos de acesso e lidar com particularidades de cada serviço.

Com a introdução de um API Gateway, a comunicação passa a ter uma entrada centralizada:

              Cliente
                 |
                 v
             API Gateway
                 |
       +---------+---------+
       |         |         |
       v         v         v
   Usuários   Pedidos   Pagamentos
    Service   Service    Service
Enter fullscreen mode Exit fullscreen mode

Agora, o cliente realiza suas requisições para o Gateway, que identifica o destino apropriado e encaminha a solicitação.

Por exemplo:

GET /users/42
Enter fullscreen mode Exit fullscreen mode

O Gateway pode encaminhar essa requisição para o serviço responsável pelo gerenciamento de usuários.

Da mesma maneira:

GET /orders/15
Enter fullscreen mode Exit fullscreen mode

Pode ser encaminhada para o serviço de pedidos.

O cliente não precisa conhecer a localização interna desses componentes. Essa responsabilidade fica concentrada na camada de Gateway.

Essa característica promove um desacoplamento entre os consumidores da API e a organização interna dos serviços.

2. Por que utilizar um API Gateway?

A introdução de um Gateway procura resolver problemas que surgem à medida que uma arquitetura ganha complexidade.

Em aplicações menores, pode ser perfeitamente adequado que o frontend se comunique diretamente com um backend.

Entretanto, quando diferentes serviços passam a participar de uma mesma operação, a quantidade de integrações pode aumentar significativamente.

Imagine um frontend que precisa consultar informações de usuários, pedidos e pagamentos.

Sem uma camada intermediária, ele precisa conhecer os endereços, os contratos e os mecanismos de autenticação de cada serviço.

Além disso, políticas como limitação de requisições, monitoramento e validação de credenciais podem acabar sendo implementadas repetidamente.

O API Gateway permite centralizar determinadas responsabilidades transversais, evitando que cada serviço precise implementar individualmente todas essas funcionalidades.

Entre seus principais objetivos estão:

  • Centralizar o acesso às APIs;
  • Encaminhar requisições aos serviços correspondentes;
  • Aplicar políticas de segurança;
  • Controlar o volume de requisições;
  • Facilitar o monitoramento das interações;
  • Ocultar detalhes da infraestrutura interna;
  • Simplificar a integração com diferentes consumidores.

É importante destacar que o Gateway não elimina a necessidade de implementar segurança e validações nos próprios serviços. Ele adiciona uma camada de controle, mas não deve ser considerado a única barreira de proteção da arquitetura.

3. Principais responsabilidades de um API Gateway

Um API Gateway pode desempenhar diferentes funções, dependendo das necessidades da arquitetura e das capacidades da solução utilizada.

3.1. Roteamento de requisições

Uma das responsabilidades fundamentais é identificar o destino de cada requisição e encaminhá-la ao serviço correspondente.

Esse processo é conhecido como request routing.

Imagine que uma aplicação disponibilize os seguintes endpoints:

Endpoint público Serviço de destino
/users/** Serviço de usuários
/orders/** Serviço de pedidos
/payments/** Serviço de pagamentos
/notifications/** Serviço de notificações

O Gateway utiliza regras de roteamento para determinar qual serviço deve receber cada solicitação.

Por exemplo:

GET /users/42
Enter fullscreen mode Exit fullscreen mode

Pode ser encaminhada internamente para:

GET http://user-service:8080/users/42
Enter fullscreen mode Exit fullscreen mode

O cliente continua utilizando o endereço público disponibilizado pelo Gateway, enquanto a comunicação interna acontece de acordo com as configurações da arquitetura.

Essa abstração permite modificar a localização dos serviços sem necessariamente alterar os consumidores da API.

3.2. Autenticação e autorização

Outra responsabilidade frequentemente associada ao Gateway é o gerenciamento de políticas de acesso.

Antes de encaminhar uma requisição, ele pode verificar se o cliente apresenta credenciais válidas e se atende aos requisitos de acesso definidos.

Um mecanismo bastante utilizado nesse contexto é o OAuth 2.0, frequentemente associado ao OpenID Connect e a tokens de acesso.

Imagine uma aplicação que utiliza um provedor de identidade para autenticar seus usuários.

O fluxo simplificado pode funcionar assim:

  1. O usuário realiza a autenticação.
  2. O provedor de identidade emite um token de acesso.
  3. O cliente envia o token nas requisições destinadas à API.
  4. O Gateway recebe a solicitação.
  5. O Gateway valida o token e as condições de acesso configuradas.
  6. Caso a requisição seja aceita, ela é encaminhada ao serviço correspondente.

Um exemplo de requisição:

GET /users/42 HTTP/1.1
Authorization: Bearer eyJhbGciOi...
Enter fullscreen mode Exit fullscreen mode

O Gateway pode verificar aspectos como assinatura, emissor, validade temporal e escopos do token, conforme a política de segurança adotada.

Uma ferramenta frequentemente utilizada para gerenciamento de identidade e acesso é o Keycloak.

É importante distinguir as responsabilidades: o provedor de identidade é responsável por funcionalidades relacionadas à identidade e à emissão de tokens, enquanto o Gateway pode validar esses tokens e aplicar políticas de acesso às APIs.

Além disso, os serviços internos devem continuar protegidos. Não é recomendável confiar exclusivamente no fato de que uma requisição passou pelo Gateway.

3.3. Rate Limiting

Rate Limiting é um mecanismo utilizado para controlar a quantidade de requisições que um cliente pode realizar dentro de determinado intervalo.

Imagine uma API pública que recebe milhares de requisições de diferentes consumidores.

Sem mecanismos de controle, um único cliente poderia realizar um volume excessivo de solicitações, comprometendo a capacidade de processamento dos serviços.

O Gateway pode aplicar políticas como:

  • 100 requisições por minuto por usuário;
  • 1.000 requisições por hora por aplicação;
  • Limites específicos para determinados endpoints.

Quando o cliente ultrapassa o limite estabelecido, o Gateway pode responder com:

HTTP/1.1 429 Too Many Requests
Content-Type: application/json

{
    "message": "Rate limit exceeded"
}
Enter fullscreen mode Exit fullscreen mode

O código 429 Too Many Requests indica que o cliente enviou um número excessivo de requisições dentro de determinado período.

Esse mecanismo ajuda a proteger os serviços contra consumo excessivo de recursos e contribui para uma distribuição mais equilibrada do tráfego.

Entretanto, Rate Limiting não deve ser confundido com proteção completa contra ataques de negação de serviço. Ele é apenas uma das estratégias utilizadas no gerenciamento e na proteção do tráfego.

3.4. Load Balancing

Em arquiteturas distribuídas, um mesmo serviço pode possuir diversas instâncias executando simultaneamente.

Essa estratégia permite distribuir o processamento entre diferentes servidores e aumentar a capacidade de atendimento da aplicação.

O Gateway, dependendo da solução e da arquitetura, pode participar desse processo por meio de mecanismos de balanceamento de carga.

Imagine três instâncias de um serviço de usuários:

              API Gateway
                   |
          +--------+--------+
          |        |        |
          v        v        v
       User 1   User 2   User 3
Enter fullscreen mode Exit fullscreen mode

As requisições podem ser distribuídas entre essas instâncias utilizando diferentes estratégias.

Alguns exemplos:

Round Robin: distribui as requisições sequencialmente entre os servidores disponíveis.

Least Connections: direciona novas requisições para a instância com menor quantidade de conexões ativas.

Weighted Round Robin: distribui o tráfego considerando pesos configurados para cada instância.

O objetivo é evitar que apenas um servidor concentre todo o processamento enquanto outros permanecem subutilizados.

É importante observar que o balanceamento de carga pode ser realizado por componentes específicos da infraestrutura, como load balancers e proxies reversos. Não é obrigatório que essa responsabilidade esteja concentrada no API Gateway.

3.5. Observabilidade e monitoramento

Em sistemas distribuídos, identificar a origem de uma falha pode ser um desafio.

Uma única operação realizada pelo cliente pode atravessar diversos componentes antes de ser concluída.

O Gateway representa um ponto importante para coletar informações sobre o tráfego que entra na arquitetura.

Entre os dados que podem ser monitorados estão:

  • Quantidade de requisições recebidas;
  • Tempo de resposta;
  • Códigos de status HTTP;
  • Endpoints mais utilizados;
  • Erros de comunicação;
  • Volume de tráfego por consumidor.

Essas informações podem ser utilizadas para identificar problemas de desempenho, indisponibilidade e padrões anormais de utilização.

Além disso, mecanismos de correlação e rastreamento distribuído permitem acompanhar uma requisição ao longo dos diferentes serviços.

Um exemplo é a utilização de identificadores de rastreamento, como o traceparent, definido pelo padrão W3C Trace Context.

Com ele, diferentes componentes podem compartilhar informações que ajudam a reconstruir o caminho percorrido por uma operação.

O Gateway pode atuar como um dos pontos de instrumentação desse fluxo.

3.6. Transformação de requisições e respostas

Dependendo da solução utilizada, o Gateway também pode modificar determinados aspectos das mensagens antes de encaminhá-las ou devolvê-las ao cliente.

Essas transformações podem envolver:

  • Inclusão ou remoção de headers;
  • Reescrita de caminhos;
  • Adaptação de parâmetros;
  • Transformação de formatos;
  • Modificação de determinadas estruturas de resposta.

Imagine que um serviço interno utilize o caminho /api/v1/customers, mas a interface pública disponibilize /customers.

O Gateway pode realizar a reescrita do caminho antes de encaminhar a requisição.

Esse mecanismo permite ocultar particularidades internas e manter uma interface pública mais estável.

Entretanto, transformações excessivas podem introduzir complexidade e dificultar o entendimento do fluxo de dados.

Por isso, o Gateway deve evitar assumir responsabilidades que pertencem às regras de negócio dos serviços.

4. API Gateway e o desacoplamento arquitetural

Um dos principais benefícios do Gateway está na possibilidade de separar a interface pública da organização interna dos serviços.

Imagine que uma aplicação inicialmente possua um único serviço responsável pelo gerenciamento de usuários.

Posteriormente, devido ao crescimento do sistema, essa responsabilidade seja dividida em dois componentes:

  • Serviço de cadastro;
  • Serviço de autenticação.

Sem uma camada intermediária, os clientes poderiam precisar conhecer as alterações e modificar suas integrações.

Com o Gateway, é possível preservar os endereços públicos e alterar internamente as regras de roteamento.

          Cliente
             |
             v
         API Gateway
             |
       +-----+-----+
       |           |
       v           v
  Cadastro    Autenticação
   Service      Service
Enter fullscreen mode Exit fullscreen mode

O consumidor continua acessando a interface disponibilizada pela arquitetura, sem precisar conhecer necessariamente a reorganização interna.

Isso contribui para a evolução independente dos componentes e reduz o acoplamento entre clientes e infraestrutura.

Entretanto, esse desacoplamento depende da estabilidade dos contratos públicos. Alterações incompatíveis na interface ainda podem exigir mudanças nos consumidores.

5. API Gateway versus Reverse Proxy

Embora sejam conceitos relacionados, API Gateway e Reverse Proxy não representam exatamente a mesma coisa.

Um Reverse Proxy é um componente que recebe requisições dos clientes e as encaminha para servidores internos.

Ele pode atuar como intermediário, ocultando a infraestrutura interna e oferecendo funcionalidades como terminação TLS, cache e balanceamento de carga.

Um API Gateway pode utilizar funcionalidades de um Reverse Proxy, mas normalmente apresenta um conjunto mais amplo de recursos voltados ao gerenciamento de APIs.

Característica Reverse Proxy API Gateway
Encaminhamento de requisições Sim Sim
Ocultação da infraestrutura interna Sim Sim
Balanceamento de carga Frequentemente Dependendo da solução
Gerenciamento de APIs Não é sua finalidade principal Sim
Rate Limiting Pode oferecer Frequentemente oferece
Autenticação e autorização Pode oferecer Frequentemente oferece
Políticas por consumidor e API Depende da solução Frequentemente oferece

Um exemplo de Reverse Proxy é o Nginx, enquanto soluções como Kong e 3scale oferecem funcionalidades voltadas ao gerenciamento de APIs.

Essa distinção não significa que as ferramentas sejam limitadas a uma única categoria. Produtos modernos podem reunir funcionalidades de diferentes componentes de infraestrutura.

6. API Gateway versus Service Mesh

Outro conceito importante em arquiteturas distribuídas é o Service Mesh.

Enquanto o API Gateway concentra o gerenciamento do tráfego que entra na arquitetura, o Service Mesh procura gerenciar a comunicação entre os serviços internos.

Considere uma arquitetura com diferentes microsserviços:

             Cliente
                |
                v
           API Gateway
                |
        +-------+-------+
        |               |
        v               v
   User Service    Order Service
        |               |
        +-------+-------+
                |
                v
         Payment Service
Enter fullscreen mode Exit fullscreen mode

O Gateway controla o acesso externo.

Entretanto, os serviços também precisam se comunicar entre si. Essas interações podem exigir mecanismos de segurança, monitoramento, controle de tráfego e gerenciamento de falhas.

É nesse contexto que o Service Mesh se torna relevante.

Ele fornece uma infraestrutura dedicada ao gerenciamento da comunicação entre serviços.

Dependendo da implementação, pode oferecer:

  • Comunicação segura entre serviços;
  • Autenticação mútua utilizando mTLS;
  • Políticas de tráfego;
  • Retentativas;
  • Timeouts;
  • Circuit Breaking;
  • Observabilidade das comunicações internas.

Uma arquitetura com Service Mesh pode utilizar proxies associados aos serviços, frequentemente chamados de sidecars, para controlar o tráfego de entrada e saída.

É importante compreender que Gateway e Service Mesh não são soluções concorrentes obrigatoriamente. Eles podem coexistir, atendendo a diferentes necessidades de comunicação.

7. BFF: Backend for Frontend

Outro padrão arquitetural frequentemente relacionado ao API Gateway é o BFF (Backend for Frontend).

O BFF consiste em disponibilizar uma camada de backend específica para determinado tipo de cliente.

Imagine uma aplicação que possui:

  • Interface web;
  • Aplicativo mobile;
  • Painel administrativo.

Cada consumidor pode apresentar necessidades diferentes em relação aos dados e às operações disponibilizadas.

Uma aplicação mobile, por exemplo, pode precisar receber uma resposta mais compacta para reduzir o consumo de rede.

Já uma aplicação web pode precisar de informações adicionais para preencher diferentes componentes da interface.

Em vez de disponibilizar exatamente a mesma interface para todos os consumidores, a arquitetura pode utilizar BFFs específicos:

             Clientes
                 |
        +--------+--------+
        |        |        |
        v        v        v
      Web     Mobile    Admin
        |        |        |
        v        v        v
      BFF      BFF      BFF
        |        |        |
        +--------+--------+
                 |
                 v
           API Gateway
                 |
          Serviços internos
Enter fullscreen mode Exit fullscreen mode

Cada BFF pode adaptar as respostas às necessidades do seu consumidor.

Essa abordagem permite que diferentes interfaces evoluam de maneira independente.

Entretanto, é importante distinguir os conceitos:

  • API Gateway: concentra políticas e funcionalidades de gerenciamento de acesso às APIs.
  • BFF: adapta a interface e a composição dos dados para determinado tipo de cliente.

Um BFF pode utilizar um Gateway como parte da arquitetura, mas suas responsabilidades são diferentes.

8. O API Gateway pode se tornar um ponto de falha?

Apesar dos benefícios, introduzir um API Gateway também apresenta desafios arquiteturais.

Um deles é a possibilidade de transformar esse componente em um ponto único de falha.

Como grande parte das requisições passa pelo Gateway, sua indisponibilidade pode comprometer o acesso aos serviços que dependem dele.

Imagine uma arquitetura com dez microsserviços funcionando corretamente.

Se o único Gateway responsável por receber as requisições ficar indisponível, os clientes poderão perder acesso a todos esses serviços.

Esse cenário é conhecido como Single Point of Failure (SPOF).

Uma estratégia para reduzir esse risco é executar múltiplas instâncias do Gateway, distribuindo o tráfego entre elas.

               Cliente
                  |
                  v
            Load Balancer
                  |
          +-------+-------+
          |               |
          v               v
      Gateway 1        Gateway 2
          |               |
          +-------+-------+
                  |
                  v
            Serviços internos
Enter fullscreen mode Exit fullscreen mode

Dessa maneira, caso uma instância apresente problemas, as demais podem continuar atendendo às requisições.

Além da redundância, outras estratégias podem contribuir para a resiliência:

  • Health Checks;
  • Monitoramento contínuo;
  • Timeouts;
  • Circuit Breakers;
  • Escalabilidade horizontal;
  • Estratégias de recuperação.

Outro risco é o chamado Bottleneck, quando o Gateway se torna um gargalo de processamento.

Como ele participa de grande parte das interações externas, precisa ser dimensionado adequadamente para suportar o volume de tráfego esperado.

9. O risco de transformar o Gateway em um monólito

Um dos erros arquiteturais mais comuns é concentrar responsabilidades excessivas no API Gateway.

Como ele já participa da comunicação entre diferentes componentes, pode parecer conveniente adicionar cada vez mais funcionalidades diretamente nele.

Com o tempo, o Gateway pode começar a concentrar:

  • Regras de negócio;
  • Validações complexas;
  • Processamento de dados;
  • Integrações específicas;
  • Transformações extensas;
  • Orquestrações complexas.

Isso pode transformar o componente em uma camada excessivamente acoplada, dificultando sua manutenção e evolução.

O Gateway deve priorizar responsabilidades relacionadas à comunicação e ao gerenciamento de APIs.

As regras de negócio devem permanecer nos serviços responsáveis pelo domínio correspondente.

Por exemplo, considere uma operação de compra.

O Gateway pode autenticar o cliente, aplicar políticas de tráfego e encaminhar a requisição.

Entretanto, verificar a disponibilidade de estoque, calcular descontos e processar as regras de pagamento são responsabilidades que devem pertencer aos serviços de negócio.

Essa separação evita que o Gateway se transforme em um ponto central de processamento de toda a aplicação.

10. API Gateway e o gerenciamento de APIs

Além das responsabilidades de infraestrutura, existem soluções de API Gateway que fazem parte de plataformas mais amplas de gerenciamento de APIs.

Essas plataformas podem disponibilizar funcionalidades como:

  • Cadastro e publicação de APIs;
  • Gerenciamento de consumidores;
  • Controle de credenciais;
  • Políticas de acesso;
  • Limitação de tráfego;
  • Monitoramento de utilização;
  • Versionamento;
  • Gestão do ciclo de vida das APIs.

Nesse contexto, o Gateway é um componente de execução das políticas configuradas na plataforma.

Algumas soluções conhecidas nesse ecossistema são:

Kong Gateway: plataforma de gerenciamento e roteamento de APIs, com suporte a plugins e políticas configuráveis.

3scale API Management: solução de gerenciamento de APIs que oferece recursos relacionados a autenticação, controle de acesso, políticas de utilização e monitoramento.

Amazon API Gateway: serviço gerenciado da AWS para criação, publicação, manutenção e proteção de APIs.

Apigee: plataforma de gerenciamento de APIs do Google Cloud.

A escolha depende de fatores como infraestrutura existente, requisitos de segurança, volume de tráfego, custos, capacidade de integração e complexidade operacional.

É importante avaliar não apenas os recursos oferecidos, mas também o impacto que a solução terá na arquitetura como um todo.


Conclusão

O API Gateway é um componente importante na construção de arquiteturas distribuídas, especialmente quando diferentes serviços precisam disponibilizar suas funcionalidades por meio de uma interface centralizada.

Sua utilização permite organizar o acesso às APIs, aplicar políticas de segurança, controlar o tráfego e reduzir o acoplamento entre consumidores e infraestrutura interna.

Entretanto, sua adoção também exige decisões arquiteturais cuidadosas.

Um Gateway mal dimensionado pode se tornar um gargalo. Um componente excessivamente centralizado pode representar um ponto único de falha. E a concentração de regras de negócio pode comprometer a separação de responsabilidades da arquitetura.

Por isso, compreender o API Gateway significa entender não apenas o que ele pode fazer, mas principalmente quais responsabilidades devem pertencer a ele.

Uma boa arquitetura não é aquela que centraliza todas as operações em um único componente, mas aquela que distribui responsabilidades de maneira coerente, preservando a comunicação, a segurança e a independência entre seus elementos.

Referências

Top comments (0)