You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

买卖网站后端REST API URI设计合规性核验及优化建议咨询

接口设计核验与优化建议

你的整体设计大部分符合REST原则,基于请求头token解析当前用户身份的方案非常合理,客户端不需要持有和传递user_id,既简化了前端逻辑,也避免了user_id被篡改导致的越权风险,以下是分模块的核验和优化建议:

一、用户(Users)相关接口

  • POST /api/users:✅ 完全符合规范,创建用户属于集合类资源的POST操作,请求体传JSON格式用户信息的设计是正确的。
  • GET /api/users/{user_id}:✅ 逻辑合理,符合REST资源寻址规则,注意做好权限控制,用户的隐私信息仅允许本人或管理员查看即可。
  • GET /api/users/authenticated_user:功能逻辑没问题,建议简化为行业通用的GET /api/users/me,语义更清晰,也更便于开发和维护。
  • PUT /api/users/authenticated_user:同上,替换为PUT /api/users/me即可,通过token解析用户身份的设计很安全,不会出现越权修改其他用户信息的问题。
  • DELETE /api/users/authenticated_user:替换为DELETE /api/users/me,逻辑完全正确。
  • GET /api/ads/{ad_id}/user:✅ 合理,广告对应的发布用户属于广告的从属资源,这个层级寻址方式符合REST设计原则。

二、广告(Ads)相关接口

你纠结的「直接路由/嵌套路由」两种方案都符合REST规范,没有对错之分,可根据业务场景选择:

  • GET /api/ads:✅ 完全合理,是获取全量广告列表的标准设计,后续要加分页、筛选、排序参数也很方便。
  • 创建广告接口:你纠结的POST /api/ads和POST /api/users/me/ads都可用:
    • 如果仅支持登录用户自己发布广告,选POST /api/ads更简洁,用户身份已经从token中获取,不需要在URL中重复携带用户标识;
    • 如果后续有管理员代指定用户发布广告的需求,POST /api/users/{user_id}/ads的嵌套结构扩展性更好,可以两种接口同时保留,做好权限校验即可。
  • GET /api/ads/{ad_id}:✅ 合理,是获取单条广告资源的标准设计。
  • 更新/删除广告接口:PUT /api/ads/{ad_id}、DELETE /api/ads/{ad_id}的设计已经足够好用,只要服务端校验当前登录用户是广告发布者或管理员即可,不需要特意改为嵌套的/api/users/me/ads/{ad_id},后者除了URL更长没有明显优势。
  • GET /api/users/{user_id}/ads:✅ 合理,符合从属资源的寻址规则,用于获取指定用户发布的所有广告。
  • GET /api/users/authenticated_user/ads:替换为GET /api/users/me/ads即可,逻辑完全正确,是获取当前登录用户自己发布的广告列表的常用设计。

额外优化建议

  • 所有接口路径统一前缀,比如你代码里写的POST api/ads缺少最前面的/,统一补全为/api/xxx格式,避免路由匹配出错。
  • 如果需要支持部分字段更新,建议新增PATCH /api/users/me和PATCH /api/ads/{ad_id}接口,PUT的标准语义是整体替换资源,PATCH才对应部分更新,更符合HTTP方法的定义。
  • 接口状态码统一规范:未登录返回401,权限不足返回403,资源不存在返回404,符合HTTP协议的通用语义。

内容的提问来源于stack exchange,提问作者Bryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:06:08