2011-01-18 3 views
2

Я вызываю внешнюю службу REST (Vimeo REST API). Ответ службы - это объект JSON. Один вид в моем приложении может вызвать несколько вызовов службы (для загрузки нескольких видео).Ajax звонки из браузера через асинхронный контроллер

Я хотел, чтобы оценить плюсы и минусы использования следующей архитектуры в этой ситуации

  1. с помощью JQuery Ajax вызовов для загрузки отдельных видео (обращений к службе REST из браузера, как каждое видео имеет свой Id что единственное, что нужно, чтобы получить детали)
  2. используя ansynchronous действия контроллера для посылки вызова REST в контроллере, а затем отображая vedios

Примечание: Я использую простые службы API, которые не требуют аутентификация.

ответ

3

AsyncController не был предназначен для обслуживания асинхронных HTTP-запросов, но с целью выполнения длительных серверных процессов. Выполнение единого запроса службы REST может быть или не быть длительным процессом на стороне сервера.

Итак, независимо от того, хотите ли вы сделать запрос REST на стороне сервера или непосредственно от клиента (браузера), вам необязательно использовать AsyncController. Нормальный Controller может выполнить эту работу.

Как вы должны обрабатывать запросы видео, зависит от того, как структурирован ваш бизнес-уровень. Если есть знания видео Vimeo для обработки в бизнес-слое, лучше всего использовать вашу услугу веб-сервиса. В противном случае у вас есть бизнес-логика на вашем клиенте, что может затруднить работу.

Если, с другой стороны, ваши видео Vimeo являются лишь частью автономного пользовательского виджета, тогда безопасно обрабатывать запрос полностью на клиенте без каких-либо непредвиденных последствий.

Я предполагаю, что веб-сервисный звонок Vimeo получает файл Flash или что-то в этом роде. Это потребует большей пропускной способности, а также будет стоить больше памяти, чтобы сделать вызовы службы Vimeo с сервера, потому что тогда данные должны поступать на ваш сервер.

Если вы делаете это на стороне сервера, это происходит:

1 - Browser sends HTTP-Request to YourApplication 
2 - YourApplication sends HTTP-Request to Vimeo's WebService 
3 - Vimeo's WebService sends big HTTP Response with the Video data to YourApplication 
4 - YourApplication sends big HTTP Response with the Video data to Browser 

* If you choose to do it this way, this might be the point at which it makes sense to use an AsyncController 

Если вы делаете это на стороне клиента, это происходит:

1 - Browser sends HTTP-Request to Vimeo's WebService 
2 - Vimeo's WebService sends big HTTP Response with the Video data to the Browser 

Это делает его похожим делать все это на стороне клиента является лучше. Но тогда есть проблема всей бизнес-логики. Это можно устранить, отправив запрос ajax на действие синхронного контроллера для обработки бизнес-логики и возвратив URL-адрес вызова службы REST в браузер. Итак:

1 - Browser sends AJAX request to YourApplication 
2 - YourApplication handles business logic and sends the URL of the REST request to Browser 
3 - Browser sends AJAX request to Vimeo's WebService 
4 - Vimeo's WebService sends big HTTP response with the video data to the browser. 

Я думаю, что это, вероятно, лучший выбор.

0

Возможно, у вас могут возникнуть проблемы с первым методом, поскольку междоменные ajax-вызовы (открытая страница из домена yoursite.com, и вы делаете звонок на vimeo.com) запрещены браузерами.

В дополнение ко второму методу, вы можете использовать JSONP обеспечивается Vimeo API: http://vimeo.com/api/docs/response-formats

0

Если вы делаете несколько вызовов REST службы Vimeo для одного из методов действия, которые, казалось бы хорошим кандидатом для использования асинхронный контроллер. Это будет иметь два преимущества: это позволит вам выполнять несколько вызовов службы Vimeo параллельно, и это освободит поток, обрабатывающий запрос, и позволит ему обрабатывать другие запросы, пока сервер ожидает ответа от Vimeo.

Я предполагаю, что компромисс здесь усложняет ваш код клиента или код вашего контроллера. Еще одно преимущество выполнения запросов на стороне сервера (независимо от того, выполняете ли вы их асинхронно или нет) состоит в том, что вы можете кэшировать данные и минимизировать количество дорогих вызовов веб-сервисов, которые вы должны будете выполнять для обработки запросов в будущем. Это действительно зависит от того, является ли кеширование данных жизнеспособным вариантом в вашей ситуации.

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