【发布时间】:2016-09-24 21:28:54
【问题描述】:
将 Spring Data 用于我的 REST API 时,当前返回的响应包括 _links 字段:
{
"_embedded": {
"users": [
{
"imageUrl": "some_image_url",
"name": "some name",
"id": "57420b2a0d31bb6cef4ee8e9",
"_links": {
"self": {
"href": "http://localhost:8080/users/57420b2a0d31bb6cef4ee8e9"
},
"user": {
"href": "http://localhost:8080/users/57420b2a0d31bb6cef4ee8e9{?projection}",
"templated": true
}
}
},
...
有没有办法产生输出,例如隐藏_links 字段?例如:
{
"_embedded": {
"users": [
{
"imageUrl": "some_image_url",
"name": "some name",
"id": "57420b2a0d31bb6cef4ee8e9",
},
...
我发现因为我公开了id 字段,所以_links 并不是真正必要的,而且大多数情况下只是弄乱了我的回复。
【问题讨论】:
-
客户应该如何知道在没有链接的情况下在哪里可以找到用户?
-
@OliverGierke 我在回复中暴露了
id字段。 -
客户端如何处理不是 URI 的纯字符串?
-
@OliverGierke 我在我的 android 应用程序中使用这个 API,并且我正在使用 Retrofit。通过它的所有请求都已经定义了端点 (
http://the_host:port/),所以我只需要 /user/{id}。 /user/ 部分是在我使用的方法中定义的 (getUser())。所以我只需要 ID 字段,所以我可以打电话给getUser(id)。 -
所以您的客户端正在自己构建 URI。这打破了 REST 的基本概念(请参阅roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven)。 Spring Data REST 是建立在您想要构建一个 REST API(因此得名)的假设之上的,而不仅仅是一个 HTTP/JSON API。或者至少,你可以忍受它暴露这些特殊特征。如果你想建立打破这些原则的客户,那很好。只是不要指望框架会使错误的事情变得容易/可能吗????.
标签: spring rest spring-boot spring-data spring-data-rest