归已认证用户所有的嵌套资源的REST路径命名规范是什么?
API端点命名方案选型参考
两种设计没有绝对的对错,分别适配不同的业务场景,具体选型逻辑如下:
优先选用/profile/*类无用户ID路径的场景
如果你的接口仅允许已认证用户操作自身专属资源,完全没有跨用户操作的业务需求,选这种方案优势更明显:
- 避免路径冗余:用户身份信息可以直接从服务端的认证凭证(JWT、Session等)中提取,不需要前端额外在路径中传递用户ID
- 天然降低越权风险:服务端不需要校验路径传入的用户ID和当前登录用户是否匹配,从接口设计层面就避免了普通用户篡改路径ID操作他人资源的漏洞
对应示例的接口就是:
- 修改头像:
PUT /profile/profile-pic - 添加个人爱好:
POST /profile/hobbies
优先选用/users/{id}/*类带用户ID路径的场景
如果你的业务存在跨用户操作需求(比如管理员可以修改/查看任意用户的资料),选这种方案扩展性更强:
- 接口复用性高:同一个接口可以同时覆盖两种业务场景,服务端只需要做统一的权限校验即可:如果路径中的
{id}和当前登录用户ID一致,允许普通用户操作;如果不一致,校验当前用户是否有管理员等高权限身份,不需要单独开发两套接口 - 语义更清晰:路径直接表明了操作的是哪个用户的资源,排查问题的时候也更容易定位请求对应的用户
对应示例的接口就是:
- 修改头像:
PUT /users/{id}/profile-pic - 添加个人爱好:
POST /users/{id}/hobbies
兼顾两种需求的折中方案
如果不确定未来会不会有跨用户操作需求,可以两种形式兼容,把/profile/*做/users/me/*的别名,服务端收到路径中的me参数时自动替换为当前登录用户的ID,既保留了普通用户调用时的简洁性,也保留了管理员跨用户操作的扩展性,这也是目前多数中大型项目的通用做法。
内容的提问来源于stack exchange,提问作者ryanvb92
相关产品推荐
相关产品推荐

