web-services - 分层 RESTful URL 设计

标签 web-services rest

我已经仔细阅读了有关此问题的问题,但我仍然没有明确的答案。

我有一个应用程序,想构建一个 RESTful API 来公开信息的子集。我有三个资源:

  • 用户
  • 报告
  • 照片

  • 用户有报告,报告有照片。照片不能存在于报告之外,报告不能存在于用户之外。

    我根据我的要求设计了以下 URL

    用户登录,服务器以 token 响应, token 在所有 API 调用的 header 中发送
    GET example.com/api/
    

    获取用户信息
    GET example.com/api/users/{username}
    

    获取所有用户报告
    GET example.com/api/users/{username}/reports
    

    获取报告的所有照片
    GET example.com/api/users/{username}/reports/{report_id}/photos
    

    添加照片
    POST example.com/api/users/{username}/reports/{report_id}/photos
    

    删除照片
    DELETE example.com/api/users/{username}/reports/{report_id}/photos/{photo_id}
    

    修改照片描述
    PUT example.com/api/users/{username}/reports/{report_id}/photos/{photo_id}
    

    问题
  • 在 URL 中添加资源 ID(即资源/ID)是一种好习惯,还是应该将其添加为查询参数?
  • 这种链接资源的方法,即资源/id/sub-resource/id/等,是否可以接受且良好,还是我应该将所有资源放在顶层并使用查询参数指定其位置?
  • 最佳答案

    恕我直言,你建模得很好。

    关于 1我宁愿和resource/id一起去而不是查询参数。但是建模时必须记住的一件事是代理缓存机制等。所以不要忘记标题。

    我去寻找用于过滤和那些排序的查询参数。

    关于登录,凭据应该在标题中,不需要特定的资源。只需应用每个资源安全性。

    关于web-services - 分层 RESTful URL 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7833548/

    相关文章:

    java - 不存在表示消息寻址属性的必需 header

    c# - MVC 4 WebAPI 对不可为空类型的验证

    java - 将空字符串设置为 xsi :nil=true

    javascript - Swagger 和约会

    ios - 移动应用程序的 REST API 请求

    node.js - 注册表 REST API 最佳实践

    javascript - 单个 View 上的多个 ng-repeat

    java - JAX-WS 服务在使用默认构造函数时给出 FileNotFoundException?

    ios - 与 Silveright 和 iPad 客户端一起使用的推荐绑定(bind)是什么

    java - 非法注释异常 : Class has two properties of same name