O que é API Gateway e para que serve?

devops

A medida que seu projeto cresce, mais peças são juntadas, mais serviços são expostos, mais conexões são criadas, e assim vai. Além de crescer em tamanho, seu projeto cresce também em responsabilidades e funcionalidades que ele implementa, desde fazer uma busca simples de produtos de uma dada categoria até verifica quais meios de pagamento estão disponíveis para aquele cliente. A segmentação de responsabilidades e funções é um grandes motivadores do uso de microserviços e serverless em geral, habilitando você a separar as partes lógicas de uma aplicação monolítica em pedaços menores e mais fáceis de manter.

No entanto, com isso vem a dificuldade maior de manter essas partes soltas de alguma forma unidas para que forneçam uma experiência completa ao seu usuário final. Se você já fez algum projeto com inúmeros serviços distintos, acessíveis de formas diferentes, já deve ter sentido a merda dificuldade de manter e acessar de forma organizada isso tudo. E uma das possíveis soluções para trazer organização para essa merda toda essa estrutura toda é usar um API Gateway.

O princípio básico de um API Gateway é ser um porteiro robô para chamadas de seus serviços.

A versão orgânica do API Gateway
A versão orgânica do API Gateway

A analogia de porteiro geralmente funciona bem porque o API Gateway é a primeira "coisa" que sua chamada vai ter contato com, e é responsabilidade dele de verificar se pode ou não ir onde quer, para onde essa chamada vai ser direcionada, anotar o horário que aconteceu essa chamada, etc.

Além de fazer esse papel de "roteamento", geralmente oferece outras funcionalidades, como auth, filtros, cache, monitoramento e registros de logs. Seu objetivo principal é tirar essa dificuldade burocrática de roteamento e afins do core do seu projeto, podendo você focar mais em entregar valor do que ficar configurando essas porra de rota essas coisas incômodas que ninguém gosta de implementar (mesmo você, amigo devops).

Num mundo de (micro)serviços, onde antes existia um leque infindável de endpoints e urls e autenticação e manipulação de formatos, o API Gateway procura resolver ou no mínimo amenizar essa bagunça, agregando essas inúmeras fontes em um único ponto de contato.

Ilustração do que um API Gateway pode fazer (só não faz café ainda)
Ilustração do que um API Gateway pode fazer (só não faz café ainda)

Por mais que API Gateways são muito utilizados com topologias de microserviços, é possível usar API Gateways com outras arquiteturas também, devido a esse poder que ele traz, junto com essas funcionalidades adicionais.

Um dos aspectos interessantes de um API Gateway é seu poder de graphqlizar (mandei uma carta para o dicionário Aurélio para incluir o verbo na próxima edição) uma API REST, uma vez que como todos os endpoints podem ser concentrados em apenas um, é possível você reduzir o número de chamadas separadas e retornar um único payload dessa chamada, como na imagem abaixo, inclusive com um tamanho menor do que a soma das partes, já que podemos fazer algum tipo de manipulação ou filtragem antes de juntar as respostas.

Agregando informações e reduzindo payload. Nesse exemplo, usando o KrakenD como API Gateway
Agregando informações e reduzindo payload. Nesse exemplo, usando o KrakenD como API Gateway

O termo "API Gateway" é muitas vezes confundido com o serviço específico da AWS, o "Amazon API Gateway" mas saiba que o termo serve para designar ferramentas que fazem esse papel de porteiro-roteador e essa ideia não pertence a uma empresa específica.

Das soluções que existem no mercado, existem soluções pagas, open source, na nuvem ou self hosted, então tem bastante variedade atualmente. Algumas das principais soluções seguem abaixo:

  • Amazon API Gateway

    • Nuvem
    • Integrações fáceis se já estiver usando serviços AWS
  • Kong

    • Open source
    • Construído em cima do nginx
  • KrakenD

    • Open source
  • Tyk

    • Open source
  • Apigee

    • Nuvem
    • O velhote da lista, comprado pelo Google em 2016
  • Azure

    • Nuvem
    • Muito similar ao da AWS, melhor para quando estiver usando serviços da Azure
  • Outros, vários outros...

Como essa (não tão) sucinta lista mostra, existe uma gama de soluções para isso e com o desenvolvimento de cada uma delas, novas funcionalidades são incluídas que podem facilitar nosso controle desse caos todo desses projetos cada vez maiores. Então caso já estiver com uma aplicação desse tipo ou pretende começar uma nova, usar um API Gateway pode ser uma boa medida para você 🤙

Ricardo Pedroni © 2021