2015-05-07 2 views
2

У меня есть приложение rails, которое вызывает сторонний API для погоды.Лучшая практика для вызовов сторонних API Rails?

Проблема в том, что вызов API обычно очень медленный и иногда не выполняется. Показывать погоду не обязательно, но она добавляет приятный немного дополнительной и актуальной информации.

Прямо сейчас я вызываю Wunderground API с помощью барометра в контроллере, что означает, что страницы навсегда загружаются, если API работает медленно или не работает.

Я надеялся переместить этот вызов на вызов AJAX со страницы после загрузки страницы. Я не возражаю, если информация показывает, но немного задерживается, потому что, как уже упоминалось, это не очень важно.

Мне просто нравились лучшие практики для такого звонка? Что такое Rails?

ответ

6

Рекомендуемым способом является вызов API в фоновом режиме (с использованием планировщика) и сохранение результата в базе данных. Затем в контроллере вы можете получить данные из базы данных, и никаких задержек не будет.

+1

Вызов API асинхронно - это путь, но с помощью планировщика, чтобы сохранить результат в базе данных? Это было бы возможно только в том случае, если он знал некоторые пользовательские данные раньше, в этом случае местоположение пользователя. Вам также нужно будет запускать этот планировщик каждые несколько минут, поскольку данные о погоде зависят от времени. Вызов AJAX гораздо более уместен, либо напрямую к API, либо к другому маршруту в вашем приложении, которое запрашивает API – Mario

+2

Ну, неясно, какую информацию о погоде он показывает. Если это, например, местный документ, который показывает местный прогноз погоды, тогда запланированное фоновое задание будет прекрасным. Если он действительно показывает различную информацию для разных пользователей, я согласен с тем, что фоновая работа, вероятно, не сработает. – Mischa

+0

Спасибо, я не думал об этом. Вы правы, что просто обновлять данные о погоде в качестве фонового задания было бы возможным, если бы он показывал всем одно и то же местоположение. – Mario

2

Я бы сказал, что вы совершенно правильно переходите к вызову AJAX из браузера - таким образом, нагрузка на страницу не затрагивается, и она может занять столько времени, сколько вам будет угодно, если ваш сервер не будет ждать. Это классический случай для загрузки данных асинхронно (через обратные вызовы и/или jQuery's deferred), так что все остальное доступно во время загрузки данных, а ваши пользователи не ждут некоторой информации, которую они могут не очень заинтересовать, чтобы начать с.

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

+1

Я также хотел бы добавить, что иногда рекомендуется [кэшировать ваши вызовы API] (https://robots.thoughtbot.com/caching-api-requests) – Mario

+1

Действительно, это было бы преимуществом для запуска вызова через ваш собственный сервис, поскольку вы можете хранить данные. Это сильно зависит от пользовательских случаев, хотя, если, вероятно, будет мало пользователей или несколько запросов, преимущества несколько ограничены. – glenatron

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