最近我在使用 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 这样的资源标识,该怎么用呢?
![]() | 1 kanezeng 2016-10-25 23:23:49 +08:00 ![]() 这是 REST 要求的自描述性,一个 REST 系统所返回的资源需要能够描述自身,并提供足够的用于操作该资源的信息,如如何对资源进行添加,删除以及修改等操作。也就是说,一个典型的 REST 服务不需要额外的文档对如何操作资源进行说明。 你能对这个资源的所有操作都在_link 里了,需要那个操作就用哪个 link ,也不存在你自己需要取得 id 再去生成对应的 link 了。好处就是开发客户端的时候不需要文档,而是服务器端 api 有调整的话,因为会反映到对应的 link 的变化上,所以客户端不需要调整太多。 |