【发布时间】:2015-02-19 19:16:11
【问题描述】:
我通过用户存储库以以下形式公开了 Item 实体:
并通过项目存储库公开为:
只有后面的接受post,第一个不支持post action。
如果客户得到
并尝试更新它返回的项目:
"status": 405,
"error": "Method Not Allowed",
通过以下网址更新可以正常工作:
有没有办法允许在两个存储库上进行更新是否有意义,或者有没有办法告诉客户端它应该使用哪个 url 以一种安静的方式进行发布操作?
【问题讨论】:
-
你使用 Spring Data REST 吗?如果是这样,那么
http://localhost:8080/api/users/0/items是关联资源,而不是集合资源。 -
是的,我将 SDR 与 Neo4j 一起使用。这对我来说是新的。如果是关联资源呢?不允许通过它发布新资源吗?如果是这样,消费者如何知道要发布到哪个 url 以创建新的关联资源?
-
您设计存储库的方式
items和users彼此独立。您只需发布到它们各自的集合 URI 以创建新资源。如果您想在两者之间建立联系,您可以发布例如URI(!)http://localhost:8080/api/items/1到关联资源http://localhost:8080/api/users/0/items。这会将用户 0 与项目 1 相关联。 -
好吧,这很有趣。但我的意思更像是一个客户端,它通过用户的
items链接从http://localhost:8080/api/users/0检索了一个用户,并从http://localhost:8080/api/users/0/items检索了相关项目的列表。它如何知道项目存储库在哪里创建新项目? hatoas 的全部意义在于客户端不必知道网址我错了吗?所以它必须检查一个项目上的自我链接,但是如果关联的项目列表还空呢? -
一般来说,客户端使用(不仅仅是浏览!)你的API必须有一些关于它的先验知识。它必须知道用户是什么,物品是什么等。所以它还必须知道物品有一个端点。它可以通过调用
http://localhost:8080/api/并检索items的链接来获取该端点的地址。因此,虽然 HATEOAS 不需要提前知道地址,但它仍然需要客户端具备一些知识才能明智地使用 API。
标签: rest repository spring-hateoas