宁静的URI设计

时间:2015-03-25 07:58:48

标签: rest restful-url

让我们说应用的域结构如下:

  1. 有一个名为Department的域对象。
  2. 有一个名为Student的域对象。
  3. 有一个名为Paper的域对象。
  4. 学生和部门之间的关系是多对多的。
  5. 学生可以为自己或者为自己出版(创作)论文 特别部门。
  6. 学生可以查看他发表的所有论文 他自己和他所属的部门(后者包括 由属于同一部门的其他学生发表的论文 作为给定的学生)
  7. 以下是我认为宁静的uri设计应该是

    1. 学生为自己创建(POST)白皮书:
      /生/ {studentid} /文件
    2. 学生创建(POST)白色 特定部门的纸张
      /生/ {studentid} /部门/ {DepartmentID的} /文件
    3. 获取他为自己出版的所有学生论文 /生/ {studentid} /纸/自
    4. 获取他自己出版的所有学生论文,包括论文 他所属的部门 /生/ {studentid} /文件
    5. 点号1和2的类似获取请求。
    6. 达到上述终点的另一种方式是(仅考虑第1点和第2点):

      /生/ {studentid} /文件

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

      上述哪一种方法更好?

2 个答案:

答案 0 :(得分:1)

由于departmentid是资源识别方式的一部分,因此它必须是URL的一部分。将它放入请求主体是违反REST原则的。

答案 1 :(得分:1)

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

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

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

希望它可以帮到你, 亨利