Я работаю над приложением Laravel, используя Guzzle 6. Многие функции зависят от API, для которого я создал оболочку.
Моя оболочка представляет собой единственный класс, который создает клиент Guzzle в __construct()
и имеет множество общедоступных функций, которые возвращают ответы на запросы Guzzle.
API, который я использую, имеет ограничение в 40 запросов каждые 10 секунд. Я кеширую вещи, поэтому очень редко можно достичь этого предела, но я хотел бы знать, что мое приложение не просто умрет, если это произойдет!
Некоторые заметки о моем приложении:
- Вызовы API выполняются только в том случае, если такой же вызов не выполнялся в течение последних 6 часов. Если это так, вызов никогда не выполняется, а ответ обслуживается непосредственно из моего кеша Redis.
- В большинстве случаев вызовы API выполняются с помощью действий пользователя. Само приложение никогда бы не приблизилось к достижению этих пределов.
- В большинстве случаев у меня уже есть необходимые данные для показа запрошенных страниц пользователям. Вызов API может быть выполнен в фоновом режиме, чтобы узнать, нужно ли что-то обновить с моей стороны, но если у меня уже есть данные, а запрос API не выполнен, это не сделает страницу бесполезной.
- Приложение работает, https://likethis.tv, если хотите посмотреть. Я использую API TMDb.
Итак, мой вопрос: как мне убедиться, что я не достигну этого предела? Несколько моих идей заключаются в следующем:
- Используйте систему очередей Laravel, чтобы поместить запросы Guzzle в очередь и обрабатывать их только в том случае, если у нас еще остались запросы. Если нет, подождите, пока не истечет 10-секундное время восстановления...
- Используйте
HandlerStack
для Guzzle напрямую. Не уверен, что это возможно, но раньше я использовалHandlerStack
для кэширования ответов.
Я пытаюсь не провоцировать слишком самоуверенные ответы, но я уверен, что, вероятно, есть лучший и/или более простой способ, чем вышеописанный, или, если это хорошие идеи, любые указатели или рекомендации были бы замечательными.
Заранее спасибо.