2

我正在调用外部 REST 服务(Vimeo REST API)。服务的响应是 JSON 对象。我的应用程序中的单个视图最终可能会多次调用服务(用于加载多个视频)。

我想衡量在这种情况下使用以下架构的优缺点

  1. 使用 jquery ajax 调用加载单个视频(从浏览器调用 REST 服务,因为每个视频都有其 Id,这是获取详细信息所需的唯一内容)
  2. 使用异步控制器操作在控制器中进行 REST 调用,然后显示视频

注意:我正在使用不需要身份验证的简单 API 服务。

4

3 回答 3

3

AsyncController不是为了异步服务 HTTP 请求而设计的,而是为了执行长时间运行的服务器端进程。向 REST 服务发出单个请求可能是也可能不是一个长时间运行的服务器端进程。

因此,无论您决定在服务器端还是直接从客户端(浏览器)发出 REST 请求,都不一定需要使用AsyncController. 一个正常Controller的人可能会做这项工作。

您应该如何处理视频请求取决于您的业务层的结构。如果知道要在业务层处理的 Vimeo 视频,那么最好的做法是让您的 Web 服务调用服务端。否则,您的客户端上有业务逻辑,这会使事情难以维护。

另一方面,如果您的 Vimeo 视频只是独立 UI 小部件的一部分,那么在客户端上完全处理请求是安全的,不会产生意外后果。

我假设对 Vimeo 的 Web 服务调用接收到 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 请求来进行业务逻辑处理,并让它返回对 REST 服务的调用的 URL 给浏览器来解决。所以:

 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.

我认为这可能是你最好的选择。

于 2011-02-09T21:55:58.623 回答
0

如果您为单个操作方法多次调用 Vimeo 的 REST 服务,那么这似乎是使用异步控制器的好选择。这将有两个好处:它允许您并行执行对 Vimeo 服务的多个调用,并且它会释放处理请求的线程并允许它在服务器等待来自 Vimeo 的响应时处理其他请求。

我想这里的权衡是增加客户端代码或控制器代码的复杂性。在服务器端发出请求的另一个好处(无论您是否异步执行)是您可能会缓存数据并最大限度地减少将来处理请求时必须进行的昂贵 Web 服务调用的数量。这实际上取决于在您的情况下缓存数据是否是一个可行的选择。

于 2011-02-03T18:34:14.717 回答
0

第一种方法可能有问题,因为浏览器禁止跨域ajax调用(打开的页面来自yoursite.com域,并且您调用vimeo.com)。

除了第二种方法,还可以使用 Vimeo API 提供的 JSONP:http: //vimeo.com/api/docs/response-formats

于 2011-01-19T06:17:15.720 回答