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