【问题标题】:Different representations of one resource一种资源的不同表示
【发布时间】:2013-01-14 13:57:47
【问题描述】:

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

在我看来,我的选择是:

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

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

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

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

【问题讨论】:

    标签: http url rest uri restful-url


    【解决方案1】:

    我认为最好的方法是定义原子的、不可分割的服务对象,例如customercustomer-latest-purchase,很好,干净,简单。然后,如果客户想要一位客户最近购买的商品,他们会同时调用这两个服务调用,而不是使用时髦的参数将它们全部融合在一起。

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

    【讨论】:

    • 但据我了解,将更多资源合并为一个以减少请求数量是最佳实践...
    • 我不会这样做。这可能是以牺牲代码的简洁性和简单性为代价的小幅性能提升
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 2021-11-09
      • 2021-04-16
      相关资源
      最近更新 更多