DEV Community

Yan.ts
Yan.ts

Posted on

API Gateway

O que é API

APIs são um conjunto de operações bem definidas com o objetivo de fornecer aos seus consumidores um serviço, produto ou integração

Na pratica o consumidor de uma API utiliza o serviço sem precisar entender os detalhes da implementação.

Uma imagem com 4 personagens, um cozinheiro com a legenda "Backend", um casal jantando com a legenda "Frontend" e um garçom com a legenda "APIs"

Essa imagem ilustra bem o objetivo da API, seguindo essa analogia de restaurante um casal que pediu uma refeição geralmente não liga muito quem é a pessoa que está preparando essa refeição, eles ligam que o prato chegue até a mesa.

Da mesma forma quando vamos consumir uma API no Frontend, não importa se ela foi construída em Node, Java, Go ou qualquer outra linguagem, o que importa é o front receber o que ele espera

Existem algumas APIs famosas por serem muito bem desenhadas fazendo com que empresas ou desenvolvedores solo possam integrar facilmente com essas APIs, por exemplo a API do twitter que é super bem documentada.

API Gateway

Os API gateways surgiram para resolver um problema gerado pela arquitetura de microsserviços, vamos imaginar que temos uma api publica e um cliente quer fazer uma integração com ela, porem nosso Backend é distribuído, já pensou falar pro cliente qual a api que ele precisa chamar para cada microsserviço que ele queira trabalhar? Isso seria inviável.

Eles são ferramentas de gerenciamento, geralmente adicionadas entre um cliente e um grupo de sistemas, atuando como um ponto unico de entrada para as APIS

Imagem mostrando dois fronts diferentes se comunicando com uma api por um único ponto de entrada

Nessa imagem podemos ver dois clients Front consumindo a API porem eles falam com a API Gateway e a Gateway redireciona a requisição para o microsserviço que eles querem de fato se comunicar, inclusive fazendo a tradução de protocolo pois tem duas apis REST e uma AMQP, isso fica abstraído para o front

O Gateway vai ser sim um single point of failure (ponto único de falha), portanto temos que garantir a escalabilidade e resiliência dele.

Responsabilidades do Gateway

  • Rate limiting
  • Autenticação (Isso não isenta o serviço de ter uma autenticação própria com permissionamento e tudo mais)
  • Controle de logs
  • Gerenciamento de APIs (routing)
  • Métricas padronizadas (ops team)
  • Tracing Distribuido

Tipos de API Gateway

Enterprise Gateway

O foco dele é permitir gerenciar exposição e gerenciamento de apis voltadas ao negocio. Em geral ele permite controlar o ciclo de vida da API também.

Como o Enterprise Gateway normalmente tem muitas funcionalidades extras temos que tomar cuidado para não deixar ele fortemente acoplado com a nossa aplicação dificultando assim uma migração no futuro.

Seu proposito principal é a exposição, composição e gerenciamento de APIs externas ou internas, a manutenção em geral é feita pelo portal do API gateway e ela suporta múltiplos ambientes.

Micro/Microservices Gateway

Geralmente esse tipo de gateway tem a capacidade de "rotear" o trafego de entrada para APIs ou serviços. Em geral ele não tem suporte para o ciclo de vida da API e a equipe tem que cuidar disso em um processo separado. Geralmente é open source.

Em geral não possuem dependências externas, e são componentes standalone, facilitando assim o kubernets gerenciar o estado necessário para execução da aplicação

Seu proposito principal é a exposição, observabilidade e monitoramento de serviços, a manutenção é feita pelo time de API que via configuração declarativa fazem atualizações, isso faz parte do deployment do serviço ela controla um único ambiente, mas possui suporte a um roteamento mais dinâmico como por exemplo o Canary para facilitar o debug.

Algumas boas praticas são, usar a flexibilidade do deployment para "particionar" as APIs. E tentar ser Stateless o máximo possível aumentando assim muito a facilidade da escalabilidade e disponibilidade

Vantagens e desvantagens

Vantagens

  • Padronização de alguma features como logging e segurança
  • Ajuda na governança de rede da companhia
  • Ponto único de entrada na rede facilitando o gerenciamento

Desvantagens

  • Adiciona complexidade na arquitetura
  • Precisa de um cuidado extra, devido a disponibilidade
  • Ferramenta que precisa de manutenção/atualização

Top comments (0)