Restful api 的资源内容应不应该带上 ID?

2016-10-25 23:01:10 +08:00
 Zovven

最近我在使用 Spring Data rest 时,我发现返回的资源内容是不带 ID 号的。

{
  "_embedded": {
    "books": [
      {
        "createTime": null,
        "updateTime": null,
        "userId": null,
        "title": "Java",
        "originTitle": null,
        "translator": null,
        "author": "w",
        "cover": null,
        "rating": null,
        "summary": null,
        "publisher": null,
        "publishDate": null,
        "pages": null,
        "doubanId": null,
        "state": null,
        "isbn": null,
        "_links": {
          "self": {
            "href": "http://127.0.0.1:9090/api/books/1"
          },
          "book": {
            "href": "http://127.0.0.1:9090/api/books/1"
          },
          "reviews": {
            "href": "http://127.0.0.1:9090/api/books/1/reviews"
          }
        }
      }
    ]
  },
  "_links": {
    "self": {
      "href": "http://127.0.0.1:9090/api/books"
    },
    "profile": {
      "href": "http://127.0.0.1:9090/api/profile/books"
    }
  },
  "page": {
    "size": 20,
    "totalElements": 1,
    "totalPages": 1,
    "number": 0
  }
}

去项目的 issues 看到作者写到 restfult api 就不该返回资源的 id,资源的_link 表名了这个资源的 id 。

说实话,如果这样设计在客户端的开发上会有些麻烦。

请问下这样有什么好处呢?

在客户端的开发如果要用_link 这样的资源标识,该怎么用呢?

3767 次点击
所在节点    Java
1 条回复
kanezeng
2016-10-25 23:23:49 +08:00
这是 REST 要求的自描述性,一个 REST 系统所返回的资源需要能够描述自身,并提供足够的用于操作该资源的信息,如如何对资源进行添加,删除以及修改等操作。也就是说,一个典型的 REST 服务不需要额外的文档对如何操作资源进行说明。
你能对这个资源的所有操作都在_link 里了,需要那个操作就用哪个 link ,也不存在你自己需要取得 id 再去生成对应的 link 了。好处就是开发客户端的时候不需要文档,而是服务器端 api 有调整的话,因为会反映到对应的 link 的变化上,所以客户端不需要调整太多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/315466

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX