1

我正在创建一个 RESTful API,其中包含以下 UML-ish 图表中显示的以下资源。如多重性(括号之间)所示,有四个一对多关系。

关系图

我目前GET定义了以下方法:

GET /farmers
GET /farmers/[farmer_id]
GET /farms
GET /farms/[farm_id]
GET /llamas
GET /llamas/[llama_id]
GET /events

我正在尝试确定访问这些关系以及访问与农场和农民相关的事件(通过 Llamas)的最佳和最 RESTful 方式是什么。所有这些关系都将通过超媒体链接提供。到目前为止,我提出的两个选项是:

多个 URI

GET /farmers/[farmer_id]/farms
GET /farmers/[farmer_id]/llamas
GET /farmers/[farmer_id]/events
GET /farms/[farm_id]/farmer
GET /farms/[farm_id]/llamas
GET /farms/[farm_id]/events
GET /llamas/[llama_id]/farm
GET /llamas/[llama_id]/farmer
GET /llamas/[llama_id]/events

单一 URI 和过滤

GET /farms?farmer=[farmer_id]
GET /llamas?farmer=[farmer_id]
GET /events?farmer=[farmer_id]
GET /farmers/[farm_farmer_id]
GET /llamas?farm=[farm_id]
GET /events?farm=[farm_id]
GET /farms/[llama_farm_id]
GET /farmers/[llama_farmer_id]
GET /events?llama=[llama_id]

这些方法中的任何一种是 REST 的首选,还是我可以选择我最喜欢的一种?

4

2 回答 2

0

从 REST 的角度来看,这并不重要,只要您提供到客户端的链接即可。

从实现的角度来看,如果您使用的框架使用特定约定进行自动链接关系发布,您可能希望选择其中一个选项而不是其他选项。例如,Spring Data REST 为您提供了上面定义的开箱即用的多个 URI 方案。因此,简单地遵循该约定对您来说会少很多工作。

于 2013-10-30T04:52:07.133 回答
0

正如 Jonathon W 所说,从 REST 的角度来看,这并不重要。但是,从 HTTP 的角度来看,它确实很重要。

从 HTTP 的角度来看,多个 URI 代表一个唯一的、潜在的可缓存资源。缓存控制标头显然会控制任何缓存。但是,大多数代理不会缓存带有查询字符串的 URI,因此带有过滤选项的单个 URI 通常是不可缓存的。

您还需要考虑不包括查询字符串参数的后果。IE。/events 会输出什么?如果需要 llama_id 参数,则不明显。

就个人而言,我会选择多个 URI 选项

于 2013-10-30T06:10:07.940 回答