Мой код:ограничение скорости запросов к третьей стороной API
const limit = require('simple-rate-limiter')
const request = limit(require('request').defaults({
gzip: true
})).to(15).per(10 * 1000) // 15 requests per 10 seconds
request(API_ENDPOINT, callback) // call API thousands of times
библиотеки: simple-rate-limiter и хорошо известная request библиотека.
Мне нужно вызывать сторонний API тысячи раз, что позволяет только 15 запросов каждые 10 секунд. Вышеприведенный код не ограничивает мои запросы правильно, поэтому сервер отправляет код состояния HTTP 429 Too Many Requests
.
Я могу отправить 15 запросов одновременно, но тогда программе придется ждать в течение 10 секунд, прежде чем он сможет отправить еще какие-либо запросы, или снова получит ответ 429
.
Я думаю, это связано с тем, что подключение к серверу занимает от нескольких сотен миллисекунд до нескольких секунд (300ms-2s
). Таким образом, время моего запроса отличается от времени, когда сервер получает запрос.
Ответы с сервера содержат заголовок Date
. Может ли это как-то правильно ограничивать запросы? Есть ли библиотека, которая делает это проще? Даже после правильного ограничения скорости, если вы получаете ответ 429
, есть ли простой способ повторить это тоже?
вы хотите обмануть API и назвать конечную точку больше, чем ее ограничения? я тебя понял? – Rouz
Нет, я хочу назвать это в соответствии с ограничениями. Если я этого не сделаю, я получаю ответ «429» HTTP, который я не хочу получать. – Elmo