Melhores Práticas para Construir APIs Confiáveis

Navendu Pottekkat

Navendu Pottekkat

August 18, 2022

Technology

À 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:

  1. Problemas com designs tradicionais de APIs
  2. O que são gateways de API
  3. Como os gateways de API melhoram as APIs e
  4. 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:

  1. Latência: Quão rápido sua API responde às solicitações?
  2. Segurança: Quem pode acessar sua API? Ela é segura?
  3. Frequência de Indisponibilidade: Com que frequência sua API está fora do ar?
  4. Consistência: Seus endpoints de API são constantes? Os consumidores precisam mudar seu código com frequência?
  5. Monitoramento e Relatórios: Você consegue observar problemas e falhas em sua API? Está relatando-os aos seus consumidores?

erro de rede/api.png

À 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.

erro de rede/gateway de API.png

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.

erro de rede/confiabilidade do gateway de API.png

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:

  1. Autenticação e segurança
  2. Monitoramento e observabilidade
  3. 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.

erro de rede/autenticação de usuário.png

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.

erro de rede/limitação de taxa.png

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.

erro de rede/monitoramento e observabilidade.png

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.

erro de rede/versão antiga.png

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.

erro de rede/lançamento canário.png

Finalmente, você pode rotear todo o tráfego para sua nova API.

erro de rede/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.

erro de rede/circuit breaker.png

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.

erro de rede/redirecionamento.png

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.

Tags: