Restful URI 设计

Restful URI design

假设一个应用程序的域结构如下:

  1. 有一个名为 Department 的域对象。
  2. 有一个名为 Student 的域对象。
  3. 有一个名为 Paper 的域对象。
  4. Student 和Department 之间的关系是多对多的。
  5. 学生可以为自己或他人发表(创建)论文 特定部门。
  6. 一个学生可以查看他发表的所有论文 他本人和他所属的部门(后者包括 同系其他学生发表的论文 作为给定的学生)

我认为 restful uri 设计应该是这样的

  1. 学生为自己创建(POST)白皮书:
    /students/{studentid}/papers
  2. 学生创造了(POST)一个白色 特定部门的论文
    /students/{studentid}/departments/{departmentid}/papers
  3. 获取他为自己发表的所有学生论文 /students/{studentid}/papers/self
  4. 获取他为自己发表的所有学生论文,包括论文 他所属的部门 /students/{studentid}/papers
  5. 点号 1 和点 2 的类似获取请求。

达到上述终点的另一种方法是(仅考虑点 1 和 2):

/students/{studentid}/papers

然后在请求正文中传递departmentid。应用程序将检查请求中是否存在 departmentId。如果它不为空,那么它将假定这篇论文是针对给定的 departmentid 发表的,否则是针对学生本人的。

以上哪种方法更好?

由于 departmentid 是资源标识方式的一部分,因此它必须是 URL 的一部分。放到request body中是违反REST原则的。

此 link 可以帮助您设计 RESTful 服务:https://templth.wordpress.com/2014/12/15/designing-a-web-api/

此外,以下是我对您的网址的评论:

  • 标识您的资源的所有内容都应在资源路径中(例如 departmentid
  • 关于关系,我们需要确定哪些 URL 将处理引用。例如,/students/{studentid}/departments/{departmentid}/papers 将允许将现有论文附加到部门或创建新论文并将其附加到部门
  • 我不明白这个 url:/students/{studentid}/papers/self 尤其是令牌 selfself 是否指的是当前经过身份验证的用户?如果是这样,我认为应该使用查询参数,因为它并不真正对应于资源...事实上,您更愿意使用查询参数进行列表过滤

希望对你有帮助, 蒂埃里