Limites de Requisições

Visão Geral

O Storefront API utiliza o método de Leaky Bucket para limitar requisições, garantindo estabilidade e evitando sobrecarga na plataforma.

❗️

Para manter o bom desempenho e evitar a interrupção de serviços, é essencial que as requisições incluam o IP do usuário final no header X-Forwarded-For quando feitas pelo servidor.

Método de limite de requisições (Leaky Bucket)

O método Leaky Bucket funciona como uma "caixa", que pode receber um número de requisições dentro de um período. Se muitas requisições são feitas em um curto espaço de tempo, a "caixa" enche e começa a "vazar" (ou seja, a rejeitar) requisições.

  • Intervalo mínimo de requisições: 0.5 segundos por IP
  • Limite de tempo: 120 segundos por IP

Nota: Cada IP único recebe uma "cota" de requisições por intervalo. Por isso, para distribuições mais eficientes de requisições, é importante identificar o IP do usuário final em cada chamada, especialmente quando o código do site roda em um servidor compartilhado.

Por que o IP do Usuário Final é Essencial?

  • Distribuição de Carga: Especificando o IP do usuário final, cada visitante do site pode ser tratado de forma independente, reduzindo a chance de alcançar o limite de requisições no servidor compartilhado.
  • Desempenho e Escalabilidade: Com o IP de cada usuário identificado, a API permite um fluxo mais alto de requisições e evita limitações desnecessárias, proporcionando uma experiência de usuário mais rápida e estável.

Benefícios para Performance e Escalabilidade

Ao seguir as instruções de inclusão do IP final, sua integração com a API terá os seguintes benefícios:

  • Escalabilidade Aumentada: Cada usuário final recebe sua própria "cota" de requisições, evitando que o limite seja atingido de forma prematura.
  • Experiência de Usuário Estável: O site evita bloqueios desnecessários, proporcionando uma navegação contínua e sem interrupções para os visitantes.

Caso o IP do usuário final não seja especificado, todas as requisições do servidor compartilham o mesmo limite, levando a uma experiência degradada ou até mesmo interrompida.

Mensagens de Erro e Como Interpretá-las

Se o limite de requisições for atingido, a API retornará uma resposta de erro indicando a situação. Abaixo estão algumas mensagens comuns:

  • HTTP 429 Too Many Requests: Esse erro indica que o limite de requisições foi atingido. Verifique se o IP do usuário final está sendo enviado corretamente.
  • Dicas para Resolução: Caso essa mensagem persista, revise a implementação do header X-Forwarded-For e garanta que cada usuário final está sendo identificado de forma única.

Melhores Práticas para Desenvolvimento de API

Aqui estão algumas melhores práticas para garantir uma integração eficiente com o Storefront API:

  1. Use o Cache quando Possível: Para endpoints que não exigem atualizações constantes, considere implementar cache para reduzir chamadas à API.
  2. Monitore a Quantidade de Requisições: Acompanhe o número de requisições feitas pelo servidor para otimizar o uso da API e identificar picos de carga.
  3. Distribua as Requisições por Usuário Final: Usar o X-Forwarded-For com o IP do usuário final ajuda a distribuir o limite de requisições e evita atingir o limite de forma precoce.

Perguntas Frequentes

Por que o Storefront API utiliza o método Leaky Bucket para limitar requisições?
Esse método garante uma proteção contra sobrecarga e melhora a estabilidade da API. Ele permite uma distribuição mais controlada de requisições, oferecendo uma experiência mais fluida ao usuário final.

O que acontece se eu não incluir o IP do usuário final no header X-Forwarded-For?
Sem o IP do usuário final, todas as requisições vindas do servidor compartilham o mesmo limite, o que leva ao atingimento precoce do limite e pode bloquear temporariamente o acesso para todos os usuários.

Como posso saber se estou atingindo o limite de requisições?
Ao atingir o limite, a API retornará um erro HTTP 429 (Too Many Requests). Nesse caso, revise a documentação e garanta que o X-Forwarded-For esteja configurado corretamente.