RESTful 概念:组织分层资源
RESTful concepts: organising hierarchical resources
我正在尝试为多种用户类型组织 REST api,但我不明白应该如何相互投资资源。例如,管理员可以操作员工列表(创建、编辑和删除项目)。管理员还可以操作每个员工的工作场所列表。我认为 api 路线应该是这样的:
GET: /employees
GET: /employees/{id}
POST: /employees
PUT: /employees/{id}
DELETE: /employees/{id}
GET: /employees/{id}/workplaces
GET: /employees/{id}/workplaces/{id}
POST: /employees/{id}/workplaces
PUT: /employees/{id}/workplaces/{id}
DELETE: /employees/{id}/workplaces/{id}
我知道如果 id
的资源不存在那么我应该 return 404: Not found
,但是 GET: /employees/{id}/workplaces/{id}
呢?当 id
的雇员或工作场所不存在时,我是否应该在这两种情况下 return 404: Not found
?或者可能存在针对此任务的其他解决方案?
另外一个问题是不同权限的用户对资源的访问权限不同。例如,Department Head of Department 可以获取本部门的员工列表,但无法获取其他部门的员工列表。我建议以下 API 路径:
GET: /departments/my/employees
GET: /departments/my/employees/{id}
正如您在上面看到的,我建议替换关键字 my
上的 id
,这意味着部门的 id
必须从授权令牌中获取。其他拥有更多权限和可以列出部门的用户可以这样做:
GET: /departments/{id}/employees
GET: /departments/{id}/employees/{id}
这是构建 REST 服务的正确方法吗?
what about GET: /employees/{id}/workplaces/{id}?
Should I return 404: Not found
in both cases when employee or workplace with that id does not exist?
是的。
GET: /departments/my/employees
如果您的代码可以将 my
与真实 ID 区分开来,从 REST 的角度来看,这很好。
我正在尝试为多种用户类型组织 REST api,但我不明白应该如何相互投资资源。例如,管理员可以操作员工列表(创建、编辑和删除项目)。管理员还可以操作每个员工的工作场所列表。我认为 api 路线应该是这样的:
GET: /employees
GET: /employees/{id}
POST: /employees
PUT: /employees/{id}
DELETE: /employees/{id}
GET: /employees/{id}/workplaces
GET: /employees/{id}/workplaces/{id}
POST: /employees/{id}/workplaces
PUT: /employees/{id}/workplaces/{id}
DELETE: /employees/{id}/workplaces/{id}
我知道如果 id
的资源不存在那么我应该 return 404: Not found
,但是 GET: /employees/{id}/workplaces/{id}
呢?当 id
的雇员或工作场所不存在时,我是否应该在这两种情况下 return 404: Not found
?或者可能存在针对此任务的其他解决方案?
另外一个问题是不同权限的用户对资源的访问权限不同。例如,Department Head of Department 可以获取本部门的员工列表,但无法获取其他部门的员工列表。我建议以下 API 路径:
GET: /departments/my/employees
GET: /departments/my/employees/{id}
正如您在上面看到的,我建议替换关键字 my
上的 id
,这意味着部门的 id
必须从授权令牌中获取。其他拥有更多权限和可以列出部门的用户可以这样做:
GET: /departments/{id}/employees
GET: /departments/{id}/employees/{id}
这是构建 REST 服务的正确方法吗?
what about
GET: /employees/{id}/workplaces/{id}?
Should I return404: Not found
in both cases when employee or workplace with that id does not exist?
是的。
GET: /departments/my/employees
如果您的代码可以将 my
与真实 ID 区分开来,从 REST 的角度来看,这很好。