Ei! Como provedor de API, já estou no jogo há algum tempo e um dos aspectos mais cruciais para executar um serviço de API bem-sucedido é implementar a otimização de API. Nesta postagem do blog, vou compartilhar com vocês como implementar a otimização de API de maneira eficaz.
O que é limitação de API?
Primeiramente, vamos falar sobre o que é otimização de API. A otimização de API é uma técnica usada para controlar a taxa na qual os clientes podem acessar uma API. Ele define limites para o número de solicitações que um cliente pode fazer dentro de um período de tempo específico. Isso ajuda a prevenir abusos, proteger os recursos do servidor e garantir um uso justo para todos os usuários.
Por que a limitação de API é importante?
Existem vários motivos pelos quais a otimização da API é importante. Para começar, ajuda a prevenir ataques de negação de serviço (DoS). Usuários mal-intencionados podem tentar inundar sua API com solicitações para sobrecarregar seus servidores e interromper seu serviço. A limitação limita o número de solicitações que eles podem fazer, dificultando a realização de tais ataques.
Em segundo lugar, garante que os recursos do seu servidor sejam usados de forma eficiente. Se você tiver um grande número de clientes fazendo solicitações excessivas simultaneamente, seus servidores poderão ficar sobrecarregados, levando a tempos de resposta lentos ou até mesmo travamentos. Ao limitar as solicitações, você pode gerenciar a carga em seus servidores e manter sua API funcionando perfeitamente.
Por fim, promove o uso justo entre todos os clientes. Sem limitação, alguns clientes podem monopolizar os recursos da API, deixando outros com desempenho insatisfatório. A limitação garante que cada cliente receba uma parte justa dos recursos disponíveis.
Como implementar a otimização de API
1. Algoritmo de balde de token
Um dos algoritmos mais populares para otimização de API é o algoritmo de token bucket. Veja como funciona:
Imagine que você tem um balde que pode conter um certo número de tokens. Cada token representa uma solicitação que um cliente pode fazer. Em intervalos regulares, novos tokens são adicionados ao bucket até sua capacidade máxima. Quando um cliente faz uma solicitação, ele precisa “gastar” um token do bucket. Se não houver mais tokens no bucket, a solicitação será rejeitada ou colocada na fila até que um token fique disponível.
Aqui está um pseudocódigo simples do tipo Python para implementar o algoritmo de token bucket:


class TokenBucket: def __init__(self, capacidade, taxa): self.capacity = capacidade self.rate = taxa self.tokens = capacidade self.last_update = time.time() def get_tokens(self): now = time.time() # Calcula o número de tokens adicionados desde a última atualização new_tokens = (now - self.last_update) * self.rate self.tokens = min(self.capacity, self.tokens + new_tokens) self.last_update = agora retorna self.tokens def consumir(self, tokens): if self.get_tokens() >= tokens: self.tokens -= tokens return True return False
Neste código,capacidadeé o número máximo de tokens que o bucket pode conter eavaliaré a taxa na qual novos tokens são adicionados ao intervalo por segundo.
2. Algoritmo de janela fixa
O algoritmo de janela fixa é outra maneira simples de implementar a otimização de API. Com esse algoritmo, você divide o tempo em intervalos fixos (por exemplo, a cada minuto ou a cada hora). Para cada intervalo, você acompanha o número de solicitações que um cliente fez. Se o número de solicitações exceder um limite predefinido nesse intervalo, as solicitações subsequentes serão rejeitadas.
Veja como você pode implementá-lo em Python:
classe de tempo de importação FixedWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = janela self.request_count = 0 self.window_start = time.time() def permit_request(self): now = time.time() if now - self.window_start > self.window: # Redefinir a janela self.request_count = 0 self.window_start = agora se self.request_count < self.limit: self.request_count += 1 retorno Verdadeiro retorno Falso
Neste código,limiteé o número máximo de solicitações que um cliente pode fazer dentro dojanelaprazo.
3. Algoritmo de janela deslizante
O algoritmo de janela deslizante é uma versão mais avançada do algoritmo de janela fixa. Em vez de dividir o tempo em intervalos fixos, ele usa uma janela deslizante para rastrear solicitações. Isso significa que a janela se move continuamente e leva em consideração as solicitações feitas no passado recente.
Para implementar o algoritmo de janela deslizante, você pode usar uma estrutura de dados como um buffer circular para armazenar os carimbos de data/hora de cada solicitação. Em seguida, você verifica se o número de solicitações na janela deslizante excede o limite.
de coleções importar deque importar classe de tempo SlidingWindowThrottler: def __init__(self, limit, window): self.limit = limit self.window = window self.request_timestamps = deque() def allow_request(self): now = time.time() # Remova solicitações antigas do deque enquanto self.request_timestamps e agora - self.request_timestamps[0] > self.window: self.request_timestamps.popleft() if len(self.request_timestamps) < self.limit: self.request_timestamps.append(now) return True return False
Implementando limitação em sua API
Depois de escolher um algoritmo, você precisa integrá-lo à sua API. Aqui estão as etapas gerais:
1. Identifique o cliente
Você precisa identificar cada cliente que faz solicitações à sua API. Isso pode ser feito por meio de uma chave de API, um ID de usuário ou algum outro identificador exclusivo.
2. Armazene informações do acelerador
Você precisará armazenar informações sobre o histórico de solicitações de cada cliente. Isso pode estar em um banco de dados, um cache (como Redis) ou uma estrutura de dados na memória. Por exemplo, se estiver usando o algoritmo de token bucket, você precisará armazenar o número de tokens que cada cliente possui em seu bucket.
3. Verifique os limites do acelerador
Antes de processar uma solicitação, verifique se o cliente excedeu os limites de aceleração. Se sim, retorne uma resposta de erro apropriada (por exemplo, um código de status 429 Too Many Requests). Caso contrário, processe a solicitação normalmente e atualize as informações do acelerador adequadamente.
Exemplos de limitação de API em APIs do mundo real
Vamos dar uma olhada em alguns exemplos do mundo real. Por exemplo, a API do Twitter tem limites rígidos de limitação. Diferentes tipos de endpoints têm diferentes limites de taxa. Por exemplo, a API de pesquisa tem um limite de 450 solicitações por janela de 15 minutos para usuários padrão.
Outro exemplo é a API do Google Maps. O Google usa limitação para gerenciar o uso de seus serviços de mapas. Eles têm diferentes níveis de limites de uso com base no tipo de serviço e no plano de preços em que você está.
Conclusão
Implementar a otimização de API é essencial para qualquer provedor de API. Ajuda a proteger seu serviço contra abusos, gerenciar recursos do servidor e garantir um uso justo entre todos os clientes. Quer você escolha o algoritmo de token bucket, o algoritmo de janela fixa ou o algoritmo de janela deslizante, certifique-se de integrá-lo corretamente em sua API.
Se você está na indústria farmacêutica e procura APIs de alta qualidade comoFenofibrato丨CAS 49562-28-9,Finasterida丨CAS 98319 - 26 - 7, ouAcetato de Hidrocortisona丨CAS 50-03-3, e você estiver interessado em nossos serviços de API, adoraríamos conversar com você sobre suas necessidades. Sinta-se à vontade para entrar em contato conosco para iniciar uma discussão sobre seus requisitos de API e como podemos trabalhar juntos.
Referências
- Leighton, F. Thomson e Satish Rao. "Roteamento de pacotes e agendamento de job shop em tempo paralelo O (c log c)." Jornal da ACM (JACM) 40.2 (1993): 261 - 289.
- NAGLE, John. "Controle de congestionamento em redes IP/TCP." Revisão de comunicação de computador ACM SIGCOMM 14.5 (1984): 11 - 17.
