0

当我有一个资源时,假设customers/3哪个返回客户对象,我想用不同的字段或其他一些更改返回这个对象(例如,假设我需要在客户对象中包含他最近的购买(为了速度我不想做2个不同的查询))。

如我所见,我的选择是:

  • customers/3/with-latest-purchase
  • customers/3?display=with-latest-purchase

在第一个选项中,新表示有不同的 URI,但这真的需要吗?另外我如何告诉客户这个 URI 存在?

在第二个选项中有 GET 参数告诉服务器返回什么样的表示。URI 参数可以通过 OPTIONS 方法进行解释,并且更容易告诉客户端在哪里查找数据,因为所有表示都在一个地方。

所以我的问题是其中哪一个更好(更 RESTful)和/或有一些我不知道的更好的方法来做到这一点?

4

2 回答 2

1

我认为最好的方法是定义原子的、不可分割的服务对象,例如customerand customer-latest-purchase、nice、clean、simple。然后,如果客户希望客户有他最近的购买,他们会调用这两个服务调用,而不是用时髦的参数将它们全部融合在一起。

对象的不同表示形式在 Java 中通过接口是可以的,但我认为这对 REST 来说是个坏主意,因为它损害了它的简单性。

于 2013-01-14T14:47:32.217 回答
0

有一种误解,认为让查询参数看起来像文件路径更 RESTful。在确定不同的 URI 时会包含地址的查询部分,因此第二个选项很好。

在所有客户 GET 请求中包含最新的购买数据是否会对性能造成很大影响?如果没有,最简单的方法就是这样做,这样就不会出现奇怪的 URL 参数或双重请求。如果获得最新订单是一项重大困难(可能不应该如此),那么在查询字符串中添加一个标志以包含它并没有错。

于 2013-01-14T16:07:39.297 回答