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

我目前定义了以下GET方法:
GET /farmers
GET /farmers/[farmer_id]
GET /farms
GET /farms/[farm_id]
GET /llamas
GET /llamas/[llama_id]
GET /events我正在尝试决定什么是访问这些关系的最好和最RESTful的方式,以及访问与Farm和Farmers相关的事件(通过骆驼)。所有这些关系都将通过超媒体链接提供。到目前为止,我提出的两个选择是:
多个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,这两种方法都是首选的吗?或者我可以选择我最喜欢的一种?
发布于 2013-10-30 12:52:07
从REST的角度来看,这真的无关紧要,只要提供到客户端的链接即可。
从实现的角度来看,如果您正在使用一个使用特定约定进行自动链接关系发布的框架,那么您可能希望选择其中一个选项。例如,Spring Data REST为您提供了上面定义的开箱即用的多URI方案。因此,对于您来说,简单地遵循该约定将会减少很多工作。
发布于 2013-10-30 14:10:08
正如Jonathon W所说,从REST的角度来看,这并不重要。然而,从HTTP的角度来看,这确实很重要。
从HTTP的角度来看,多个URI代表一个唯一的、潜在可缓存的资源。缓存控制标头显然将控制任何缓存。但是,大多数代理不会缓存带有查询字符串的URI,因此带有筛选选项的单个URI通常是不可缓存的。
您还需要考虑不包括查询字符串参数的后果。即。/events会输出什么?如果llama_id参数是必需的,则这一点不明显。
就我个人而言,我倾向于多URI选项
https://stackoverflow.com/questions/19671027
复制相似问题