> For the complete documentation index, see [llms.txt](https://consumindo-apis-com-elixir.cafecomelixir.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://consumindo-apis-com-elixir.cafecomelixir.com.br/problemas-de-api-externa/rate-limit-de-longa-duracao/agendando-uma-nova-tentativa-de-requisicao.md).

# Agendando uma nova tentativa de requisição

Algumas vezes não precisamos que a requisição seja feito na hora. Por exemplo, sincronizar a lista de cafés, para caso algo mudar ou ser adicionado não precisa ser feito na hora. Claro que se conseguirmos fazer diretamente, seria interessante. Mas, nem sempre é possível. E pior, podemos ter chego na quantidade máxima de requisições do dia. Antes, para solucionar o *Rate Limit* de requisições por segundo, apenas criamos um mecanismo de espera. Nesse caso não vai ser interessante. Não vamos querer fazer o usuário ficar 20h esperando a resposta, certo? O que podemos fazer é adicionar nossa requisição em uma fila, que aguarda por exemplo, um dia para ser executada e deixar isso de forma assíncrona. Ganhamos com:

1. Não deixamos o usuário preso na tela
2. Resolvemos o problema do *Rate Limit* com longa duração (como por exemplo, um dia)
3. Temos o dado atualizado após essa execução.

Precisamos de alguns requisitos para essa estratégia funcionar.

### Número 01

Para realizar a requisitações de forma assincrona, precisamos de toda os dados armazenados para executar quando a hora chegar. Caso você queira que o café com ID 1 seja atualizado, precisamos do ID na hora da sincronia. Para isso, precisaremos de uma ferramenta de armazenamento. Utilizaremos o banco de dados ***Postgres*** para manter padrão de mercado.&#x20;

Tendo escolhido o banco de dados, precisamos nos comunicar com ele. Seguindo também o padrão de mercado, utilizaremos o *Ecto*. Provavelmente você já usou ou já ouviu falar sobre ele.

### Número 02

Precisamos de uma ferramentas que cuide do agendamento e rode os *jobs* quando a hora chegar. Para fazer isso, iremos utilizar uma ferramenta chamada [Oban](https://hexdocs.pm/oban/installation.html) e agendar a sincronia.

Nossa lista ficou:

* [Configurar *Ecto* para se comunicar com *Postgres*](/problemas-de-api-externa/rate-limit-de-longa-duracao/adicionando-ecto-ao-projeto.md)
* [Configurar *Oban*](/problemas-de-api-externa/rate-limit-de-longa-duracao/instalando-oban.md)
