假设我有一个代表一组数据的资源parent
。对于这样的事情,一个宁静的URL结构应该非常简单:
现在说每个parent
由一组child
资源组成。子资源ID是否应被视为具有全局或本地范围?我相信给出了以下2个URL:
但是GET,PUT和DELETE怎么样?以下哪项是合适的?
似乎归结为child
资源ID的唯一性范围。 ID仅在父聚合中是唯一的吗?或者它是所有父母的所有孩子中独一无二的?一个比另一个更正确,还是取决于相关资源的id唯一性范围?
如果示例1比示例2更合适,并且id = 44的父级没有id = 6的子级(比如子id = 6属于id = 9的父级),应该返回什么HTTP响应?
答案 0 :(得分:3)
@danludwig
我认为它实际上并不重要,因为URI只是资源标识符,所有这些用户友好的层次结构只对人类很重要......但在任何一种情况下我都会问这个问题“/ api / parents / children / 6“,让我们分解:
我认为在构建分层URI时这是一个很好的测试。只需确保每个段都绑定到特定资源,并且不返回404.
答案 1 :(得分:1)
ID仅在父聚合中是唯一的吗?或者它在所有父母的所有孩子中都是独一无二的吗?
这取决于孩子是一个且只有一个父母的cild的可能性。如果是这种情况,则可以使用本地范围的ID。
另一方面,如果孩子可能是多个父母的孩子,则需要全球范围的身份证。
当然,可以询问具有全局ID的孩子是否只能存在于父母的“下方”,或者是否可以使用不包含父母的URL来解决这样的孩子。
答案 2 :(得分:0)
GET, PUT or DELETE /api/parents/44/children/6
网址向我看来,因为它表示父资源和子资源之间的关系。
唯一的问题是您需要知道父ID才能使用子资源。
一个替代方法是一起删除URL的“父”部分:GET, PUT or DELETE /api/children/6
并在子资源中有一个“链接”属性或元素,为其父级提供URL。
<child>
<id>6</id>
<link rel="parent" href="/api/parents/1" />
...
</child>