REST URL设计-一个HTTP调用中的多个资源

REST URL设计-一个HTTP调用中的多个资源,http,api,rest,Http,Api,Rest,可能重复: 据我所知,获取资源的良好REST URL如下所示: /resource/{id} 我的问题是,我经常需要同时获得大量的资源,而不想对每一个资源进行单独的HTTP调用 是否有一个整洁的URL设计可以满足这一要求,还是这不适合RESTAPI?我过去曾使用过类似的东西 /resources/a/d/ 这将在x和Y之间返回一个列表 差不多 <resources> <resource>a</resource> <resource>b

可能重复:

据我所知,获取资源的良好REST URL如下所示:

/resource/{id}
我的问题是,我经常需要同时获得大量的资源,而不想对每一个资源进行单独的HTTP调用


是否有一个整洁的URL设计可以满足这一要求,还是这不适合RESTAPI?

我过去曾使用过类似的东西

/resources/a/d/
这将在x和Y之间返回一个列表

差不多

<resources>
  <resource>a</resource>
  <resource>b</resource>
  <resource>c</resource>
  <resource>d</resource>
</resources>

A.
B
C
D

您还可以在URL中添加更高级的搜索,以确定实际的资源是什么

我会说
/resources/foo,bar,baz
(分隔符可能会根据ID的性质和您的审美喜好而有所不同,“
foo+bar+baz
”,“
foo:bar:baz
”等等)。看起来比
foo/bar/baz
(“baz of bar of foo”?)更“语义”整洁

如果资源ID是数字的,那么即使使用范围快捷方式,如
/resources/1,3,5-9,12


或者,如果您不需要精确地查询具有特定ID的资源,而是需要查询具有特定属性的资源组,可能需要类似于
/resources/state=complete/size>1GiB/!活动/

根据您的回答,您的问题的答案是创建一个包含该单一信息集的新资源。e、 g

GET /Customer/1212/RecentPurchases
在单个url中创建具有多个标识符的复合url会限制缓存的好处,并给服务器和客户端增加不必要的复杂性。当你加载一个有很多图形的网页时,你看不到

GET /MyPage/image1.jpg;image2.jpg;image3.jpg

这不值得这么麻烦。

也许你可以试一下


[获取]/购买/用户:123;限额:30 ;;sort_date:DESC

如果不是一个范围而是随机项,那么这种方法会如何工作?这样做对我来说很没有效果。至少要定义一个新的资源名称范围,例如支持它的“范围”。您可以将查询字符串与集合一起使用,但在这种情况下,最好指定一些元数据,而不是ID列表,例如:/Customer/1212/Purchases?limit=30&order=date\u desc这似乎是一种方法。。。。然而,它以不同的形式提出了同样的问题。当我得到最近购买的所有产品ID,并且需要从其他只知道产品的地方获得更多关于它们的信息(名称、图片)时,会发生什么?我该如何为此设计api?您提供了指向该资源的链接,而不是id。因此,在您的RecentPurchases资源中,您返回并让客户机遵循链接-1。REST与URL命名约定无关。一个“好的RESTURL”是胡说八道的,它表明你误解了REST架构,而不是一个傻瓜。这是关于设计URL命名约定的。另一个是关于如何在Rails中实现一个。@aehlke虽然Fielding提出的REST体系结构没有谈到URL命名约定,但我不认为“良好的REST URL”是胡说八道。设计干净并传达意图的URL绝对有意义。@Suhas你是对的,我太苛刻了,但这个问题揭示了对REST的根本误解。@aehlke即使它确实揭示了对REST的误解,这使得发布一个解释REST为何对标识符语法不可知的答案成为了一个很好的机会,这对询问者和找到此页面的任何人都很有价值。这绝非谴责某人问这个问题的理由。