【发布时间】:2011-10-14 09:15:35
【问题描述】:
我正在创建一个 REST API,并且一直在考虑允许捆绑来自客户端的请求的想法。通过捆绑,我的意思是他们可以发送一个请求,其中包含多个“真实”请求,然后将它们一起交付给客户端。通常是 javascript ajax 请求。像这样的:
POST /bundlerequest
["/person/3243", "/person/3243/friends", "/comments/3243?pagesize=10&page=1", "/products", "/product/categories" ]
(捆绑的请求只能是GET请求,至少目前为止) 这旨在返回类似的东西
{
"success" : ["/person/3243", "/person/3243/friends", "/comments/3243?pagesize=10&page=1", "/products", "/product/categories" ],
"error" : [],
"completiontime" : 94,
other relevant metadata...
"responses" : [
{"key" : "/person/3243" , "data" : {"name" : "John", ...} },
{"key" : "/person/3243/friends" , "data" : [{"name": "Peter", "commonfriends" : 5, ...}] },
etc...
]
}
这种捆绑的好处是它减少了请求的数量,这在例如移动设备上尤其重要。
所以我的第一个问题是,我的方法是一个好的方法吗?有没有人做过这样的事情的经验?
AFAIK 解决此问题的常用方法是编写服务器端代码以返回组合数据,我认为这与客户端相关。 (例如,twitter 用户流就是这样做的,它结合了个人信息、最新推文、最新个人消息等。)但这使得 API 非常固执己见,当客户端需要更改时,服务器可能需要更改以适应优化。
而第二个问题是如何实现呢?
我的后端是 ASP.NET MVC 3 和 IIS 7。我是否应该在应用程序中实现它,并在内部调用请求中指定的其他操作的 bundlerequest 操作?
是否可以直接在 IIS 7 中实现?编写一个模块,透明地拦截对 /bundlerequest 的请求,然后调用所有相应的子请求,让应用程序完全不知道发生的捆绑?这也将允许我以与应用程序无关的方式实现这一点。
【问题讨论】:
-
这听起来很酷。
-
所有这些 url 都只会返回 JSON 吗?或者有些可能会返回 HTML 部分和其他内容?
-
@DarinDimitrov 是的,仅限 JSON,但是我看到用户退出或无法访问部分 API 的潜在问题,然后可能会重定向到登录页面。这些都是我必须解决的问题。
标签: javascript json asp.net-mvc-3 api iis-7