# O que é o rate limit

### Uma pequena história

Imagine que você criou um serviço. Outros programas se conectam a ele. Seu custo é baixo e isso é ótimo. De repente, algo explode em seu painel da AWS. A conta de $100 dolares vai para $500 sem a adição de nenhum cliente. Você não entende o que aconteceu. Acessa os logs e percebe que um único usuário (programa que se integra com você) está realizando 100 requisições por segundo. Isso não faz sentido, ele precisaria apenas de uma requisição a cada minuto para se manter atualizado. Para resolver esse problema, você pede para seu time implementar um *rate limit*.&#x20;

O usuário então tem permissão de fazer 5 requisições por minuto. Caso passe do limite, ele é penalizado e recebe um status indicando  que fez muitas requisições (status 429). Até que a penalidade seja resetada, o usuário estará bloqueado de requisitar recursos do serviço.

Com esse exemplo, demonstrei a necessidade do rate limit em serviços. Estou mostrando dessa forma para você entender que não é algo que existe apenas por existir. Ele tem um proposito de controle. Seja de recurso, seja de modelo de negócio (você pode pagar mais para liberar mais requisições se quiser.)

Já que você quer se conectar a outros serviços, acabará encontrando essa tecnica uma hora ou outra e vai precisar saber o que fazer em relação a ela.

### Mas o que é Rate Limit exatamente?

Ele é uma técnica para para limitar o número de requisições que podem ser feitos em uma faixa de tempo. Exemplo

* Máximo de 10 requisições por segundo
* Máximo de 500 requisições por minuto
* Máximo de 1000 requisições por mês

Ao chegar ao limite de execução, receberemos o [status 429](https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Status/429).

**A decisão de APIs usarem ela são diversas:**

* Prevenir carga alta de requisições;
* Prevenir algum tipo de abuso em relação a API (principalmente públicas)
* Estratégia de negócio. Podendo enquadrar seu cliente em uma faixa de preço com um máximo de requisições.

Isso pode ser um problema quando tentamos integrar com algum serviço. Queremos nos beneficiar o máximo e não fazer requisições que desperdiçam a cota. Vamos dar uma olhada em possíveis soluções para esse limitador.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://consumindo-apis-com-elixir.cafecomelixir.com.br/problemas-de-api-externa/o-que-e-o-rate-limit.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
