Como usar “rate limit” em sua API no .NET 7

Marcio Nizzola
3 min readMay 25, 2023

--

Como usar “rate limit” em sua API no .NET 7

O .NET 7 possui um middleware para limitação da taxa de acesso às API´s, ele é implementado pela biblioteca Microsoft.AspNetCore.RateLimiting onde podemos limitar a quantidade de requisições que uma API está apta a aceitar num período de tempo a ser estabelecido.

De acordo com a documentação, temos várias formas de implementar este tipo de limitador, sendo:

-Janela fixa — utiliza uma janela de tempo fixa para controlar as limitações

-Janela deslizante — utiliza uma janela de tempo deslizante, dividindo em segmentos e reciclando solicitações não utilizadas

-Bucket de Token — similar ao anterior, mas um número fixo de tokens é adicionado a cada período de reabastecimento.

-Simultaneidade — limita o número de solicitações simultâneas.

Vamos implementar então um limitador de janela fixa somente para demonstrar a possibilidade de implementação em qualquer aplicação .Net 7.

Para implementação, basta colocar o código abaixo no program.cs.

E incluir esta linha na parte inferior assim que tiver criado o objeto app

Depois de feita esta implementação, basta colocar os comandos no seu endpoint (quando usando Minimal Api).

Após implementar a limitação, fiz 5 requisições para ultrapassar o limite implementado, com isto recebi a mensagem de erro conforme demonstrado abaixo, com erro 429:

Neste exemplo, podemos incluir uma fila de espera, onde a requisição não devolve erro caso haja 3 requisições na fila, resultando erro apenas se excederem este limite.

Basta que seja informado o nome da política “period3” no mapeamento do endpoint.

Executando o exemplo anterior, vemos que o tempo de execução depois de atingir o limite foi bem maior, por que ela foi colocada na fila e esperou que a janela de execução finalizasse para devolver a resposta.

Otimizando

E para finalizar para que nossa inicialização não fique desorganizada e cheia de código, vamos aplicar um extension method para deixar o código limpo no program.cs ficando uma simples linha.

Crie uma classe estática e faça referência à ela como feito abaixo para que possa funcionar da forma como foi demonstrada na inicialização.

Assim o código fica muito mais legível e colocamos cada coisa no seu lugar !

Criando uma classe para guardar nossas extensões de inicialização !

Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !!

Saiba mais

Rate limiting middleware in ASP.NET Core | Microsoft Learn

--

--

Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.