2016-05-16 2 views
1

Моя проблема заключается в том, что я делаю слишком много запросов 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-запросы являются единственным способом?

Любая помощь будет оценена по достоинству.

ответ

2

Насколько я могу видеть, Ваша модель выглядит подходит для применения и соответствует каким образом API-ориентированное приложение должно работать ...

Однако, один потенциальный урезанная вы могли бы сделать это для кэширования некоторых результатов локально. то есть сохранить локальную версию некоторых данных, которые вряд ли будут изменяться в течение сеанса. Например, если количество команд вряд ли изменится, то сохраните результаты 1 запроса API локально и используйте это вместо того, чтобы напомнить данные из вашего API.

После этого маршрута вы можете выбрать обновление только определенных данных через определенный промежуток времени. Итак, если пользователь посмотрел на team-details, то откажитесь от обновления данных за следующие 10-20 минут. Однако это снова зависит от того, насколько чувствительны к времени ваши данные.

+0

Спасибо. Каждая конечная точка чувствительна к времени в разной степени. Например, конечная точка '/ teams', возможно, обновляется каждый час. '/ team-details' и'/player-details' должны быть более частыми. Как вы могли бы предотвратить повторные запросы API в течение определенного периода времени, как вы предлагаете? – Paulos3000

+0

Его довольно сложно получить на 100% запертой с клиентской стороны. но мой подход был бы после успешного запроса (и кеширования) хранилищем на временную метку локально.Я предполагаю, что вы используете 'httpInjector' для ваших вызовов' http' в ваш API, так что это место, где я бы проверял вашу метку времени. Если временная метка <вы хотите, не вызывайте API и не перенаправляете данные из локального кеша – Harvey

+0

Или при сохранении данных локально (кэширование) добавьте временную метку к данным. Затем ВСЕГДА запросите запрос в кеше. если данные пустые ИЛИ временная метка слишком старая. Затем вызовите API для обновления. Надеюсь, это поможет! – Harvey

Смежные вопросы