Spring data rest Hateoas - 如何处理同一实体的不同 uri
Spring data rest Hateoas - How to deal with different uris for the same entity
我通过用户存储库以以下形式公开了项目实体:
并通过项目存储库公开为:
只有后一个接受post,第一个不支持post动作。
如果客户得到
并尝试更新它取回的项目:
"status": 405,
"error": "Method Not Allowed",
通过以下 url 进行更新工作正常:
有没有办法允许对两个存储库进行更新是否有意义,或者有没有办法告诉客户端 url 它应该用于 post 操作中的什么 restful 方式?
users
和items
有自己的存储库。这意味着 item
不依赖于特定的 user
- 它可以属于任何一个或多个 users
,具体取决于您的限制。这也意味着 user
存储库不控制 items
的生命周期。换句话说,将 item
发布到任何以 /api/users
开头的 URL 超出范围。
/api/users/0/items
是所谓的关联资源。它用于建立 user
和 item
之间的关系。这是通过将 item
的 URI 发布到此 URL 来完成的。但该项目必须存在。
由此产生的问题是客户应该如何知道?您正确地注意到 HATEOAS 的要点是客户端不必知道 links,或者更糟的是,不必手动创建它们。请注意,不知道 link 和不知道 API 之间存在巨大差异。不知道 /api/items
和不知道有物品仓库是不一样的。还有例如不知道 user
是什么 - 从语义上讲 - 使用 API.
没有意义
有其他选择吗?并不真地。您可以实现一个控制器来处理对 /api/users/0/items
的请求。但这对每个关联资源来说都是大量工作。您可以通过 ResourceProcessor 将项目存储库的 link 添加到每个 user
。但这可能会造成混淆,因为你会得到一个 link items
和一个 itemRepository
或 addItems
.
我通过用户存储库以以下形式公开了项目实体:
并通过项目存储库公开为:
只有后一个接受post,第一个不支持post动作。
如果客户得到
并尝试更新它取回的项目:
"status": 405,
"error": "Method Not Allowed",
通过以下 url 进行更新工作正常:
有没有办法允许对两个存储库进行更新是否有意义,或者有没有办法告诉客户端 url 它应该用于 post 操作中的什么 restful 方式?
users
和items
有自己的存储库。这意味着 item
不依赖于特定的 user
- 它可以属于任何一个或多个 users
,具体取决于您的限制。这也意味着 user
存储库不控制 items
的生命周期。换句话说,将 item
发布到任何以 /api/users
开头的 URL 超出范围。
/api/users/0/items
是所谓的关联资源。它用于建立 user
和 item
之间的关系。这是通过将 item
的 URI 发布到此 URL 来完成的。但该项目必须存在。
由此产生的问题是客户应该如何知道?您正确地注意到 HATEOAS 的要点是客户端不必知道 links,或者更糟的是,不必手动创建它们。请注意,不知道 link 和不知道 API 之间存在巨大差异。不知道 /api/items
和不知道有物品仓库是不一样的。还有例如不知道 user
是什么 - 从语义上讲 - 使用 API.
有其他选择吗?并不真地。您可以实现一个控制器来处理对 /api/users/0/items
的请求。但这对每个关联资源来说都是大量工作。您可以通过 ResourceProcessor 将项目存储库的 link 添加到每个 user
。但这可能会造成混淆,因为你会得到一个 link items
和一个 itemRepository
或 addItems
.