我通过用户存储库以以下形式公开了Item实体:
并通过项目存储库公开:
只有后者接受帖子而第一个不支持后期操作。
如果客户获得
并尝试更新它返回的项目:
"status": 405,
"error": "Method Not Allowed",
通过以下网址更新工作正常:
有没有办法,是否允许对两个存储库进行更新是有意义的,还是有办法告诉客户端它应该以一种宁静的方式用于后续操作的URL?
答案 0 :(得分:2)
users
和items
拥有自己的存储库。这意味着item
与特定user
无关 - 它可以属于no,any或许多users
,具体取决于您的约束。这也意味着user
存储库不控制items
的生命周期。换句话说,将item
发布到以/api/users
开头的任何网址都超出了范围。
/api/users/0/items
是一种所谓的关联资源。它用于建立user
和item
之间的关系。这是通过将item
的URI发布到此URL来完成的。但该项目必须存在。
由此产生的问题是客户应该如何知道?您正确地指出,HATEOAS的要点是客户端不必知道链接,或者更糟糕的是,必须手动创建链接。请注意,不知道链接和不知道API之间存在巨大差异。不知道/api/items
并且不知道存在项目存储库是不一样的。例如,不知道user
是什么 - 在语义上 - 使用API是没有意义的。
有替代品吗?并不是的。您可以实现一个处理器处理/api/users/0/items
请求的控制器。但这对每个协会资源来说都是很多工作。您可以通过ResourceProcessor将项目存储库的链接添加到每个user
。但这可能会令人困惑,因为您会有一个items
和一个itemRepository
或addItems
的链接。