> 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)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://consumindo-apis-com-elixir.cafecomelixir.com.br/problemas-de-api-externa/rate-limit-de-longa-duracao/agendando-uma-nova-tentativa-de-requisicao.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
