Моя проблема заключается в том, что я делаю слишком много запросов API, которые я хочу сократить, если это возможно. Ниже я опишу ситуацию:Как сократить запросы API в приложении AngularJS
У меня есть три страницы, все связанные с использованием ngRoute
. Как это:
Page A: Teams (list of teams)
URL: "/teams"
Page B: Team Details (list of players)
URL: "/teams/team-details"
Page C: Player Details (list of player stats)
URL: "/teams/team-details/player-details"
Страница A заполняется, потянув массив команд из API очень легко с помощью простой $resource.query()
запроса, и используя нг-повтор перебирать их.
Страница Б заполняются путем вызова шаблона HTML и заполнения определенных полей со значениями из запроса отдельного API к конечной точке /team-details
, принимая значение team_id
из щелкнутого элемента на странице А.
страница C (как и на стр. B) берет player_id
от щелчка игрока на странице B и вызывает конечную точку /player-details
с использованием этого значения. Это еще один отдельный запрос.
Это все работает отлично, но, как вы можете себе представить, один пользователь может довольно легко наберет более 100 запросов API в течение часа.
У меня есть ограничение по запросам 1000/hour, так что если всего 10 пользователей в сети одновременно, это может легко превысить мой лимит и закрыть мой API.
Если бы я мог получить доступ к API как к одной единственной конечной точке, которая выводила все данные и подданные в один набор, то это решило бы мою проблему, но поскольку мне нужно запрашивать отдельные конечные точки, я не вижу, как это сделать.
Есть ли лучший способ приблизиться к этому? Или эти избыточные API-запросы являются единственным способом?
Любая помощь будет оценена по достоинству.
Спасибо. Каждая конечная точка чувствительна к времени в разной степени. Например, конечная точка '/ teams', возможно, обновляется каждый час. '/ team-details' и'/player-details' должны быть более частыми. Как вы могли бы предотвратить повторные запросы API в течение определенного периода времени, как вы предлагаете? – Paulos3000
Его довольно сложно получить на 100% запертой с клиентской стороны. но мой подход был бы после успешного запроса (и кеширования) хранилищем на временную метку локально.Я предполагаю, что вы используете 'httpInjector' для ваших вызовов' http' в ваш API, так что это место, где я бы проверял вашу метку времени. Если временная метка <вы хотите, не вызывайте API и не перенаправляете данные из локального кеша – Harvey
Или при сохранении данных локально (кэширование) добавьте временную метку к данным. Затем ВСЕГДА запросите запрос в кеше. если данные пустые ИЛИ временная метка слишком старая. Затем вызовите API для обновления. Надеюсь, это поможет! – Harvey