REST API子终结点的命名约定
让我们想象一下,我有几个相关的数据表(当然还有对象):REST API子终结点的命名约定,api,rest,naming-conventions,Api,Rest,Naming Conventions,让我们想象一下,我有几个相关的数据表(当然还有对象): 类父类{ 最终int id; } 班童{ 最终int id; 最终int-parentId; } 对于父CRUD操作,我将使用建议的命名约定: 获取/父级-检索所有父级 发布/父级-创建新父级 GET/parents/:id-检索具有unqique id的父项 PUT/parents/:id-使用unqique id更新父级 DELETE/parents/:id-删除具有unqique id的父项 使用相同的命名约定建议,我将使用以下
类父类{
最终int id;
}
班童{
最终int id;
最终int-parentId;
}
对于父CRUD操作,我将使用建议的命名约定:
- 获取/父级-检索所有父级
- 发布/父级-创建新父级
- GET/parents/:id-检索具有unqique id的父项
- PUT/parents/:id-使用unqique id更新父级
- DELETE/parents/:id-删除具有unqique id的父项
- GET/parents/3/children-获取id为1的父级的所有子级
- POST/parents/3-为id为1的父级创建新子级
- GET/parents/1/children/3-为id为1的父对象获取子对象3
- 放置/parents/1/children/3-更新id为1的父级的子级3
- 删除/parents/1/children/3-删除id为1的父级的子级3
3
是子项的唯一(主键)Id
,因此我不需要知道子项的获取、更新和删除请求中的父项Id
,因为实际上我可以使用类似于以下内容的名称:
- GET/children/3-获取子3(隐式地它属于父1)
- PUT/children/3-更新子3(隐式地它属于父1)
- DELETE/children/3-删除子3(隐式地它属于父1)
- GET/parent/3/children-获取父级3的子级
- 发布/父级/3/子级-为父级3创建子级
- GET/children/3-获取id为3的子对象
- PUT/children/3-使用id 3更新子项
- DELETE/children/3-删除id为3的子项
- REST不关心资源标识符的拼写;从通用组件的角度来看
/parents/1/children/3
/children/3
/b7191775-b50b-4f35-815f-49070adbfc29
都很好
如果您预计需要经常从子上下文描述父资源的标识符,
/parents/1/children/3
可能很方便,因为您可以使用将子标识符转换为父标识符。当3
是不属于父1
的子标识符时,我预计不会出现问题。将3
作为子标识符从数据库中获取信息将适用于任何父标识符。至于我,这是错误的。为了解决这个问题,我需要在获取子信息之前检查子标识符是否属于父范围。但is使功能更加复杂,因为我需要执行过多的SQL查询来检查子项是否属于父项。因此,命名问题与这个问题有关。