REST API:端点名称冲突以及端点路径中的前缀/名称空间/逻辑作用域
通常,我以这种方式公开端点:REST API:端点名称冲突以及端点路径中的前缀/名称空间/逻辑作用域,rest,api-design,Rest,Api Design,通常,我以这种方式公开端点: /api/1/users /api/1/users/{uid} /api/1/groups /api/1/groups/{gid} /api/1/items /api/1/items/{iid} /api/1/groups/{gid}/users /api/1/users/{uid}/items 为了表示层次结构,我通常采用以下方式: /api/1/users /api/1/users/{uid} /api/1/groups /api/1/groups/{gid
/api/1/users
/api/1/users/{uid}
/api/1/groups
/api/1/groups/{gid}
/api/1/items
/api/1/items/{iid}
/api/1/groups/{gid}/users
/api/1/users/{uid}/items
为了表示层次结构,我通常采用以下方式:
/api/1/users
/api/1/users/{uid}
/api/1/groups
/api/1/groups/{gid}
/api/1/items
/api/1/items/{iid}
/api/1/groups/{gid}/users
/api/1/users/{uid}/items
或获得类似的结果:
/api/1/users?group_id={gid}
/api/1/items?user_id={uid}
除非你面对这个问题,否则一切都会顺利进行:
/api/1/users
/api/1/groups # groups of users
/api/1/items
/api/1/groups # groups of items
在这里我可以想象两个选项:
/api/1/users
/api/1/groups
/api/1/items
/api/1/item_groups
/api/1/{users_prefix}/users
/api/1/{users_prefix}/groups
/api/1/{items_prefix}/items
/api/1/{items_prefix}/groups
另一方面,这种冲突非常罕见,前缀使路径更加复杂 我还有疑问,因为/api/1/{items\u prefix}并不代表任何资源或集合。
虽然/api也不这样做,并且通常使用/api/{version}启动path 因此,我无法从REST原则或最佳实践的角度找出解决名称冲突的最佳方法是什么
提前感谢。常见免责声明:REST不关心您的url结构,这里也没有标准原则。以下或多或少是一个建议/意见: 我对你的问题的理解是:
# users
/user - list of users
/user/{id} - one user
/user/{id}/item - items belonging to 1 user
# groups
/group - list of groups
/group/{id} - one group
/group/{id}/item - items belonging to 1 group
/group/{id}/user - users belonging to one group
# items
/item - list of all items. If this is meaningless, just throw a
useful error that tells the developer why there is no root
collection for this.
/item/{id} - one item
谢谢你的回复。我的想法是url结构没有规则。关于您的提案,我们混合了两种不同的实体——用户组和项目组。这是完全不同的事情。想象一下,在一个列表中有“管理员”和“食物”。此外,对于检索GET/group/{id}/item的[],我们有双重含义。它可能是对有效项目组的请求,其中没有项目,也可能是对用户组的请求,我们没有机会区分它们。如果您有两个不同的实体,并且您担心混淆,请将它们称为
usergroup
和itemgroup
。这是我在问题中描述的两个变体之一:1/api/1/用户组2/api/1/{user_prefix}/groups关于选择一个而不是另一个的推理呢?问题在于推理。)