Apidog

All-in-one Collaborative API Development Platform

Design de API

Documentação de API

Depuração de API

Mock de API

Testes Automatizados de API

Inscreva-se gratuitamente
Home / Ponto de vista / Limitação de Vazão vs. Limite de Taxa | Diferenças que você deve conhecer

Limitação de Vazão vs. Limite de Taxa | Diferenças que você deve conhecer

A limitação de taxa e o controle de fluxo são duas abordagens para garantir que os usuários da API tenham uma experiência suave e agradável. Ao prevenir a sobrecarga das APIs, descubra como a limitação de taxa e o controle de fluxo podem ser implementados em suas próprias APIs hoje!

APIs são a espinha dorsal essencial da nossa web moderna, permitindo que diferentes aplicações se comuniquem e troquem dados entre si. Com cada aplicação tendo seu nicho, algumas pessoas mal-intencionadas tendem a abusar dessas aplicações úteis, impactando negativamente a experiência de outros usuários. No entanto, e se houvesse uma maneira de evitar isso?

💡
A maioria das ferramentas de API tem suas limitações quando se trata de usá-las - pedidos limitados para fazer, casos de teste limitados para configurar, e assim por diante. No entanto, há uma ferramenta de API que contorna todas essas restrições.

Apresentamos a você Apidog, uma ferramenta de desenvolvimento de API tudo-em-um que permite que você teste APIs sem limites. A única restrição que o Apidog tem é a restrição que os APIs de terceiros têm (se eles restringem suas APIs ou não).

Se você está interessado em experimentar o Apidog, comece gratuitamente hoje (ou no futuro) clicando no botão abaixo! 👇 👇 👇
button

Para descobrir qual é a diferença entre limitação e restrição, definiremos cada um individualmente.

O que é Limitação?

No contexto das APIs, a limitação é considerada uma abordagem dinâmica para gerenciar o acesso à API e prevenir sobrecarga na API. APIs de limitação regulam o fluxo de solicitações recebidas para garantir a estabilidade e performance da API.

Principais Recursos de Limitação de API

1. Ajuste Dinâmico:

  • Diferente dos limites fixos da limitação, a limitação ajusta dinamicamente os tempos de resposta com base nas condições de tráfego em tempo real. Imagine uma autoestrada com limites de velocidade variáveis. O tráfego provoca ajustes (limitação) para manter o fluxo suave (estabilidade da API).

2. Técnicas e Algoritmos:

  • Balde com Furo: Solicitações recebidas preenchem um balde virtual com um pequeno furo na parte inferior. Os tempos de resposta aumentam (o furo diminui) à medida que o balde se enche (sistema se aproxima da sobrecarga), e vice-versa.
  • Baldes de Tokens: Usuários têm um número limitado de tokens (solicitações) por período de tempo. Cada solicitação consome um token. Se não houver tokens disponíveis (balde vazio), a solicitação é limitada até que um token seja reabastecido.

3. Opções de Configuração:

  • Granularidade: A limitação pode ser aplicada globalmente ou a endpoints específicos da API com base em seu uso de recursos.
  • Limiares: Limiares personalizáveis determinam quando a limitação entra em ação. Esses podem ser baseados em fatores como solicitações simultâneas ou utilização de recursos.
  • Janelas de Tempo: O comportamento de limitação pode ser configurado para janelas de tempo específicas (por exemplo, horários de pico).

4. Mecanismos de Resposta:

  • Reduzindo a Velocidade:  A abordagem mais comum, aumentando os tempos de resposta para solicitações subsequentes.
  • Códigos de Erro: Retornando códigos de erro HTTP específicos (por exemplo, 429 Muitas Solicitações) para indicar limitação e opções potenciais de repetição.
  • Filas de Espera:  Mantendo temporariamente solicitações em uma fila até que recursos se tornem disponíveis.

5. Recursos Avançados:

  • Listagem Branca: Concedendo a usuários ou aplicações específicas isenção de limitação para operações críticas.
  • Listagem Negra:  Limitando mais agressivamente usuários que exibem comportamento abusivo.
  • Integração com Monitoramento:  Parâmetros de limitação podem ser ajustados dinamicamente com base em dados em tempo real sobre o uso da API.

Exemplo de Código de Limitação de API

1. Limitação simples de API com atraso (Python):

def handle_request(user_id):
  # Simular a verificação de um contador de recurso compartilhado
  if resource_counter > threshold:
    time.sleep(delay_time)  # Limitar introduzindo um atraso
  # Lógica de processamento da solicitação aqui...

2. Limitação de balde de token para solicitações de API (Python)

from threading import Lock

class TokenBucket:
  """
  Uma classe simples de balde de token para limitação de taxa.
  """
  def __init__(self, capacity, refill_rate):
    """
    Inicializa o balde de token com uma capacidade específica e taxa de reabastecimento.

    Args:
      capacity (int): O número máximo de tokens que o balde pode conter.
      refill_rate (float): A taxa na qual os tokens são adicionados ao balde (tokens por segundo).
    """
    self.capacity = capacity
    self.refill_rate = refill_rate
    self.tokens = capacity  # Começa com um balde cheio
    self.last_refill_time = time.time()
    self.lock = Lock()

  def consume(self, amount):
    """
    Tenta consumir um número especificado de tokens do balde.

    Args:
      amount (int): O número de tokens a serem consumidos.

    Returns:
      bool: Verdadeiro se os tokens foram consumidos com sucesso, Falso caso contrário.
    """
    with self.lock:
      self._refill()
      if self.tokens >= amount:
        self.tokens -= amount
        return True
      return False

  def _refill(self):
    """
    Reabastece o balde com base no tempo decorrido e na taxa de reabastecimento.
    """
    now = time.time()
    elapsed_time = now - self.last_refill_time
    self.tokens = min(self.capacity, self.tokens + (elapsed_time * self.refill_rate))
    self.last_refill_time = now

# Exemplo de uso
bucket = TokenBucket(capacity=5, refill_rate=1)  # 5 tokens, reabastecido a 1 token/segundo

def access_api():
  # Simular lógica de solicitação de API aqui...
  print("Acessando API...")

if bucket.consume(2):
  access_api()
else:
  print("Solicitação limitada, tokens insuficientes!")

# Tente novamente após um curto atraso
time.sleep(1)

if bucket.consume(1):
  access_api()
else:
  print("Solicitação limitada, tokens insuficientes!")

Explicação do código (passo a passo):

  1. Primeiro, defina uma TokenBucket classe que gerencia o pool de tokens
  2. Recebe capacidade (tokens máximos) e taxa de reabastecimento (tokens por segundo) como argumentos.
  3. O método consume tenta remover um número especificado de tokens do balde.
  4. Chama o método privado _refill para garantir que o balde esteja atualizado com base no tempo passado.
  5. Se os tokens forem suficientes, eles são consumidos - o método retorna True
  6. Se não, o método retorna False - indica limitação.

O que é Limitação de Taxa?

No contexto das APIs, a limitação de taxa refere-se a uma restrição definida sobre o número de solicitações que um usuário ou aplicação pode fazer dentro de um período específico. Imagine isso como uma bilheteira em uma atração popular, onde apenas um certo número de solicitações é permitido por minuto.

Principais Recursos da Limitação de Taxa de API

1.Configuração de Limites:

Limites de Solicitação: Os provedores de API definem o número máximo de solicitações permitidas por usuário ou aplicação dentro de uma janela de tempo específica (por exemplo, 100 solicitações por hora). Esses limites podem ser baseados em fatores como:

  • Camadas de Usuário: Planos gratuitos vs. pagos podem ter limites diferentes.
  • Endpoints da API: Diferentes funcionalidades podem ter requisitos de recursos variados, levando a limites diferentes.

Janelas de Tempo: Limites são aplicados dentro de períodos de tempo específicos, tipicamente segundos, minutos ou horas. Isso permite explosões controladas de atividade enquanto previne sobrecarga sustentada.

2.Mecanismos de Contagem:

Identificação de Usuário: Solicitações são associadas a usuários ou aplicações. Isso pode ser alcançado através de:

  • Chaves de API: Identificadores únicos fornecidos aos desenvolvedores para autenticação e rastreamento de uso.
  • Endereços IP: Embora menos seguros, endereços IP podem ser usados para limitação básica de taxa.

Contadores de Solicitação: A API mantém rastreamento do número de solicitações recebidas de cada usuário/aplicação dentro da janela de tempo atual.

3. Estratégias de Aplicação:

  • Bloqueio: Quando um usuário atinge o limite, suas solicitações subsequentes podem ser completamente bloqueadas até que a janela de tempo reinicie. Esta é uma abordagem mais rigorosa adequada para prevenir abusos.
  • Limitação:  A limitação, frequentemente usada em conjunto com a limitação de taxa,  reduz a velocidade das solicitações subsequentes em vez de bloqueá-las completamente. Isso permite algum nível de acesso enquanto previne sobrecarga. (A limitação é um conceito separado, mas pode ser usada juntamente com a limitação de taxa)

4. Recursos Avançados:

  • Limites de Explosão:  Permissões de curto prazo para exceder o limite médio de taxa para acomodar explosões de atividade. Isso oferece flexibilidade para casos de uso legítimos.
  • Balde com Furo: Uma abordagem metafórica onde solicitações são como água enchendo um balde com um pequeno furo. O furo representa o limite de taxa. Solicitações são processadas enquanto o balde não estiver cheio.
  • Baldes de Tokens: Usuários são alocados um conjunto de tokens (solicitações) que se reabastecem ao longo do tempo. Solicitações consomem tokens, e usuários são limitados se não houver tokens disponíveis.

5. Comunicação e Monitoramento:

  • Documentação da API:  Documentação clara descreve limites de taxa, incluindo limites específicos, janelas de tempo e métodos de aplicação.
  • Monitoramento e Alertas: Provedores de API monitoram padrões de uso e ajustam limites de taxa conforme necessário para manter a estabilidade.

Exemplos de Código de Limitação de Taxa de API

1. Rastreando limites e janelas de tempo (Python):

# Simular armazenamento de informações de limite de taxa de API recuperadas da documentação da API
rate_limit = 100  # Solicitações por hora
time_window = 3600  # Segundos em uma hora

last_request_time = None

def make_api_request():
  global last_request_time

  # Verificar se está dentro da janela de tempo e se há solicitações restantes suficientes (hipotético)
  if last_request_time is None or (time.time() - last_request_time) >= time_window:
    # Fazer a solicitação da API
    last_request_time = time.time()
    # ... (lógica da solicitação da API)
  else:
    print("Limite de taxa da API atingido, aguardando reset...")
    # Implementar estratégia de recuo (veja o ponto 3)

# Exemplo de uso
make_api_request()

O exemplo de código acima exibe uma situação onde você armazena informações de limite de taxa recuperadas (solicitações e janela de tempo) e rastreia o horário da última solicitação. O código então verifica se uma solicitação pode ser feita com base no tempo restante e nas solicitações permitidas dentro da janela.

2. Utilizando os cabeçalhos de resposta da API (Python):

import requests

def make_api_request():
  response = requests.get("https://api.example.com/data")
  if response.status_code == 429:  # Código de limite de taxa excedido
    # Extrair informações de limite de taxa dos cabeçalhos (X-RateLimit-Remaining, X-RateLimit-Reset)
    # Implementar estratégia de recuo (veja o ponto 3)
  else:
    # Processar resposta bem-sucedida
    # ...

O exemplo de código acima verifica o código de status da resposta para um código de erro comum de limite de taxa 429 e tenta extrair informações relevantes dos cabeçalhos de resposta se encontrado.

Diferenças Resumidas Entre Limitação e Limitação de Taxa

Recurso Limitação Limitação de Taxa
Objetivo Gerenciar o fluxo de tráfego da API para manter a performance Controlar o acesso à API para prevenir abusos e sobrecarga
Mecanismo Ajusta dinamicamente os tempos de resposta com base no tráfego Define um limite rígido para solicitações por janela de tempo
Aplicação Reduz a velocidade das solicitações durante períodos de pico (mais flexível) Bloqueia solicitações que excedem o limite (mais rígido)
Foco Manter a estabilidade e a performance Justiça e prevenção de abusos
Configuração Limiares, janelas de tempo, mecanismos de resposta Limites e janelas de tempo
Caso de Uso Prevenir sobrecarga durante tráfego intenso, priorizando solicitações urgentes Proteger contra ataques DoS, controlar uso

Apidog - Solicitações Ilimitadas para Aperfeiçoar Sua Aplicação

A única coisa que está impedindo você de criar as melhores APIs são as limitações de suas ferramentas - a maioria das ferramentas de API hoje possui barreiras financeiras. Se você não pagar, não pode obter os recursos essenciais para o desenvolvimento de APIs. No entanto, uma ferramenta de desenvolvimento de API vai além para fornecer os melhores serviços para desenvolvedores.

interface do apidog
button

Conheça Apidog, uma ferramenta de desenvolvimento de API tudo-em-um que facilita todo o processo de desenvolvimento de API para todo o ciclo de vida da API. Com o Apidog, você pode criar novas APIs e modificar APIs preexistentes, além de realizar testes, simulações e documentação para garantir que suas APIs funcionem perfeitamente.

Construindo APIs com Apidog

Com o Apidog, você pode criar APIs por conta própria. Isso significa que você também pode definir seu próprio limite de taxa da API, e decidir se deseja limitar sua API com a ajuda de codificação adicional.

nova api apidog

Comece pressionando o botão Nova API, como mostrado na imagem acima.

adicionar detalhes nova api apidog

Em seguida, você pode selecionar muitas das características da API. Nesta página, você pode:

  • Definir o método HTTP (GET, POST, PUT ou DELETE)
  • Definir a URL da API (ou endpoint da API) para interação cliente-servidor
  • Incluir um/múltiplos parâmetros a serem passados na URL da API
  • Fornecer uma descrição sobre qual funcionalidade a API pretende fornecer. Aqui, você também pode descrever o limite de taxa que planeja implementar em sua API.

Quanto mais detalhes você puder fornecer na fase de design, mais descritiva será sua documentação de API, como mostrado na próxima seção deste artigo.

Certifique-se também de incluir se há quaisquer limites de taxa impostos na API, pois os usuários precisarão desse conhecimento para trabalhar com a API.

Para fornecer um pouco de assistência na criação de APIs, caso esta seja sua primeira vez criando uma, você pode considerar ler estes artigos.

Uma vez que você tenha finalizado todas as necessidades básicas para fazer uma solicitação, você pode tentar fazer uma solicitação clicando em Enviar. Você então deve receber uma resposta na parte inferior da janela do Apidog, como mostrado na imagem acima.

A interface de usuário simples e intuitiva permite que os usuários vejam facilmente a resposta obtida da solicitação. Também é importante entender a estrutura da resposta, pois você precisa combinar o código em ambos os lados do cliente e do servidor.

Gerar Documentação Descritiva de API com Apidog

Com Apidog, você pode rapidamente criar documentação de API que inclui tudo o que os desenvolvedores de software precisam com apenas alguns cliques.

processo passo a passo compartilhando documentação de api apidog

Seta 1 - Primeiro, pressione o botão Compartilhar no lado esquerdo da janela do aplicativo Apidog. Você deverá ver a página "Documentos Compartilhados", que deve estar vazia.

Seta 2 - Pressione o botão + Novo embaixo de Nenhum Dado para começar a criar sua primeira documentação de API do Apidog.

Selecione e Inclua Propriedades Importantes da Documentação da API

insira detalhes da api e selecione propriedades do documento da api apidog

O Apidog fornece aos desenvolvedores a opção de escolher as características da documentação da API, como quem pode visualizar sua documentação de API e definir uma senha para o arquivo, para que apenas indivíduos ou organizações escolhidos possam visualizá-la.

Visualizar ou Compartilhar Sua Documentação de API

abrir compartilhar editar documentação da api apidog

O Apidog compila os detalhes do seu projeto de API em uma documentação de API que pode ser visualizada através de uma URL de site. Tudo o que você precisa fazer é distribuir a URL para que outros possam visualizar sua documentação de API!

Se mais detalhes forem necessários, leia este artigo sobre como gerar documentação de API usando Apidog:

Conclusão

A limitação e a limitação de taxa são ambas ferramentas essenciais para gerenciar o acesso à API e garantir um funcionamento suave. Embora compartilhem o objetivo comum de prevenir sobrecarga, elas diferem em sua abordagem.

A limitação de taxa atua como um porteiro rigoroso, estabelecendo um limite rígido para solicitações dentro de um período de tempo. Isso prioriza a justiça e previne abusos. A limitação, por outro lado, funciona como um dimmer, ajustando dinamicamente os tempos de resposta com base no tráfego. Isso garante estabilidade e performance ao lidar com picos de solicitações de forma suave.

Compreender as forças de cada abordagem permite que os provedores de API criem um robusto sistema de controle de acesso que equilibra as necessidades dos usuários com a capacidade da API, resultando em uma experiência segura e eficiente para todos.

Com Apidog, você não precisa se preocupar com solicitações limitadas. Você também pode importar APIs que deseja entender e analisá-las usando o design simples e intuitivo do Apidog. Comece sua jornada de desenvolvimento de API com o Apidog hoje!

button

Junte-se à Newsletter da Apidog

Inscreva-se para ficar atualizado e receber os últimos pontos de vista a qualquer momento.