Melhores Práticas para Construir APIs Confiáveis
August 18, 2022
À medida que suas APIs escalam, a necessidade de torná-las confiáveis e robustas aumenta.
Este artigo discute as melhores práticas para construir APIs confiáveis, introduzindo um tipo especial de proxy reverso chamado gateway de API.
Vamos explorar:
- Problemas com designs tradicionais de APIs
- O que são gateways de API
- Como os gateways de API melhoram as APIs e
- Padrões e exemplos usando gateways de API
Mas, primeiro, o que são APIs "confiáveis"?
O que Torna uma API Confiável?
Como provedor de serviços, você pode ter acordos de nível de serviço (SLAs) com seus clientes, geralmente expressos em tempo de atividade (uptime) — o tempo que o serviço é garantido para estar online e operacional.
O tempo de atividade é uma visão míope da confiabilidade. Para entender o que significa ser confiável, você precisa olhar para os fatores que afetam o tempo de atividade. Uma vez que você entenda esses fatores, estará em uma posição melhor para construir serviços confiáveis.
Vamos olhar para esses fatores e as questões que eles levantam:
- Latência: Quão rápido sua API responde às solicitações?
- Segurança: Quem pode acessar sua API? Ela é segura?
- Frequência de Indisponibilidade: Com que frequência sua API está fora do ar?
- Consistência: Seus endpoints de API são constantes? Os consumidores precisam mudar seu código com frequência?
- Monitoramento e Relatórios: Você consegue observar problemas e falhas em sua API? Está relatando-os aos seus consumidores?
À medida que as organizações migram para arquiteturas nativas da nuvem, torna-se difícil para as equipes de desenvolvimento considerar esses fatores em cada um de seus serviços. E à medida que esses sistemas escalam, seria muito mais fácil delegar essas responsabilidades para um sistema único e separado. Diga olá aos gateways de API!
Gateway de API, o Ponto de Entrada Unificado
Um gateway de API age como um intermediário entre seus clientes e suas APIs. Ele aceitará todo o tráfego (chamadas de API) como proxies reversos, encaminhará a solicitação para os serviços necessários em seu backend e retornará os resultados necessários.
Um gateway de API pode ser o ponto central que lida com todas as preocupações de autenticação, segurança, controle de tráfego e monitoramento, permitindo que os desenvolvedores de API se concentrem nas necessidades de negócios e facilitando a melhoria da confiabilidade.
Existem muitas ofertas de gateways de API de código aberto e gerenciados disponíveis. Neste artigo, estarei usando o Apache APISIX.
A próxima seção descreverá algumas das melhores práticas para tornar suas APIs confiáveis usando gateways de API.
Melhores Práticas de Confiabilidade com Gateways de API
Vamos nos concentrar mais no padrão subjacente do que na implementação real, pois isso pode variar com base na sua escolha de gateway de API.
Vou dividir esses padrões em três categorias:
- Autenticação e segurança
- Monitoramento e observabilidade
- Controle de versão e tempo de inatividade zero
Vamos explorar cada categoria em detalhes abaixo.
Autenticação e Segurança
Autenticação de Usuário
Solicitações autenticadas com gateways de API protegem as interações cliente-API. Após a autenticação de um cliente, seu gateway de API pode usar os detalhes do cliente obtidos para controle refinado.
O APISIX lida com a autenticação diretamente por meio de plugins como key-auth e jwt-auth. O APISIX também suporta autenticação OAuth e sistemas de controle de acesso baseado em função como o wolf por meio de plugins como openid-connect e wolf-rbac, respectivamente.
Limitação de Taxa
Picos de tráfego intencionais (ataques DoS) e não intencionais (clientes fazendo muitas solicitações) para suas APIs podem derrubá-las como um castelo de cartas. Configurar a limitação de taxa melhorará a confiabilidade de seus sistemas ao lidar com esses cenários.
Você pode configurar a limitação de taxa em seu gateway de API, e se o número de solicitações aumentar acima de um limite, o gateway de API pode atrasar ou rejeitar as solicitações excedentes.
Com o APISIX, você pode usar qualquer um dos três plugins para configurar limites de taxa com base no número de solicitações, número de solicitações simultâneas por cliente e contagem (limit-req, limit-conn, limit-count).
Monitoramento e Observabilidade
A confiabilidade da sua API e sua configuração de monitoramento andam de mãos dadas. E você pode monitorar suas métricas de confiabilidade configurando o monitoramento em seu gateway de API.
Logs de API e rastreamentos fornecem informações detalhadas sobre uma chamada de API. Essas informações ajudarão você a saber quando sua API falhou ou teve um erro o mais rápido possível. Falhas silenciosas levam a erros não corrigidos que podem causar problemas no futuro.
Com alguma configuração, você também será capaz de prever e antecipar o tráfego para o futuro, ajudando você a escalar de forma confiável.
O APISIX possui plugins que se integram com plataformas/especificações de registro (Apache SkyWalking, RocketMQ), métricas (Prometheus, Datadog) e rastreamento (OpenTelemetry, Zipkin). Você pode ler mais sobre Observabilidade de API com Plugins do APISIX.
Controle de Versão e Tempo de Inatividade Zero
Lançamento Canário
Ao mudar para novas versões de suas APIs, você deve garantir que não interrompa seu tráfego. Os clientes ainda devem ser capazes de fazer solicitações à sua API e obter a resposta correta.
Com um gateway de API, você pode configurar lançamentos canários. Isso garantirá que sua API permaneça funcional durante a transição, e você também pode reverter para a versão mais antiga se houver algum problema.
Inicialmente, o gateway de API roteará todo o tráfego para a versão antiga de sua API.
Quando você tiver uma nova versão, pode configurar o gateway de API para rotear parte do seu tráfego para essa nova versão. Você pode continuar aumentando a porcentagem de tráfego para seu novo serviço e verificar se tudo está funcionando conforme o esperado.
Finalmente, você pode rotear todo o tráfego para sua nova API.
O APISIX usa o plugin traffic-split que permite controlar o tráfego para seus serviços. Você pode usá-lo para configurar lançamentos canários ou sua configuração de lançamento personalizada.
Circuit Breaker
Quando um de seus serviços upstream está indisponível ou está enfrentando alta latência, ele precisa ser cortado do seu sistema. Caso contrário, o cliente continuará tentando a solicitação, levando ao esgotamento de recursos. Essa falha pode se espalhar para outros serviços em seu sistema e derrubá-los.
Assim como os disjuntores elétricos isolam componentes defeituosos de um circuito, os gateways de API têm um recurso de circuit breaker que desconecta serviços defeituosos, mantendo o sistema saudável. O tráfego para esses serviços é redirecionado ou atrasado até que o serviço se torne saudável.
O APISIX vem com um plugin api-breaker que implementa esse padrão.
Redirecionamentos
À medida que você atualiza suas APIs, seus endpoints podem sofrer algumas alterações. Tradicionalmente, isso significaria que o aplicativo cliente deve enviar solicitações para o /novo-endpoint-da-api
em vez do /endpoint-antigo-da-api
, o que significa que seus consumidores devem mudar manualmente cada chamada para esse endpoint de API.
Se não for antecipado, isso pode quebrar aplicativos clientes.
Com um gateway de API, você pode fornecer uma camada de abstração e redirecionar solicitações para o /novo-endpoint-da-api
sem que os clientes precisem mudar suas solicitações. Com códigos de status e mensagens de redirecionamento adequados, você pode gradualmente depreciar o /endpoint-antigo-da-api
sem que seus consumidores experimentem qualquer tempo de inatividade.
Com o APISIX, você pode usar o plugin redirect para configurar redirecionamentos.
Conclusão
Quando a confiabilidade se torna uma preocupação primária, é evidente que os gateways de API são necessários à medida que mais organizações dividem seus monólitos em microsserviços e migram para arquiteturas nativas da nuvem.
No entanto, isso não significa que os gateways de API são para todos. Dependendo do tamanho e uso da sua API, um gateway de API pode ser exagero, e você pode se safar usando um proxy reverso com capacidades básicas de roteamento e balanceamento de carga.
Os casos de uso mencionados aqui apenas arranham a superfície das capacidades de um gateway de API. Você pode aprender mais sobre gateways de API e Apache APISIX em apisix.apache.org.