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 的角度来看,这很好。