当我有一个资源时,让我们说customers/3
返回客户对象,我想用不同的字段或其他一些更改返回此对象(例如,假设我需要包含在客户对象中)他的最新购买(为了速度,我不想做2个不同的查询))。
我认为我的选择是:
customers/3/with-latest-purchase
customers/3?display=with-latest-purchase
在第一个选项中,新表示有不同的URI,但这真的需要吗?另外我如何告诉客户端这个URI存在?
在第二个选项中有GET参数告诉服务器返回什么样的表示。 URI参数可以通过OPTIONS方法解释,并且更容易告诉客户在哪里查找数据,因为所有表示都在一个地方。
所以我的问题是哪些更好(更多RESTful)和/或是否有一些更好的方法来做我不知道的事情?
答案 0 :(得分:1)
我认为最好的是定义原子的,不可分割的服务对象,例如customer
和customer-latest-purchase
,很好,干净,简单。然后,如果客户希望客户购买他的最新产品,他们会调用两个服务电话,而不是用一个时髦的参数将其全部卡在一起。
通过接口可以在Java中对对象进行不同的表示,但我认为这对REST来说是一个坏主意,因为它会影响其简单性。
答案 1 :(得分:0)
有一种误解,认为查询参数看起来像文件路径更加RESTful。在确定不同的URI时包含地址的查询部分,因此第二个选项没问题。
在所有客户GET请求中包含最新购买数据是否有很大的性能影响?如果没有,最简单的方法就是这样做,这样就不会有奇怪的URL参数或双重请求。如果获得最新订单是一项重大困难(它可能不应该是这样),在查询字符串中添加一个标志以包含它是没有错的。