restfuluri设计

restfuluri设计,rest,restful-url,Rest,Restful Url,假设应用程序的域结构如下所示: 有一个称为Department的域对象 有一个名为Student的域对象 有一个名为Paper的域对象 学生和系的关系是多对多的 学生可以为自己或学生发表(创作)论文 特定部门 一个学生可以查看他发表的所有论文 他本人和他所属的部门(后者包括 同系其他学生发表的论文 作为给定的学生) 我认为restful uri设计应该是这样的 学生为自己制作(张贴)白皮书: /学生/{studentid}/论文 学生创建(张贴)一个白色 特定部门的论文 /学生/{student

假设应用程序的域结构如下所示:

  • 有一个称为Department的域对象
  • 有一个名为Student的域对象
  • 有一个名为Paper的域对象
  • 学生和系的关系是多对多的
  • 学生可以为自己或学生发表(创作)论文 特定部门
  • 一个学生可以查看他发表的所有论文 他本人和他所属的部门(后者包括 同系其他学生发表的论文 作为给定的学生)
  • 我认为restful uri设计应该是这样的

  • 学生为自己制作(张贴)白皮书:
    /学生/{studentid}/论文
  • 学生创建(张贴)一个白色 特定部门的论文
    /学生/{studentid}/部门/{departmentid}/论文
  • 让他自己发表所有的学生论文 /学生/{studentid}/论文/自我
  • 让他自己发表所有学生论文,包括论文 他所属的部门 /学生/{studentid}/论文
  • 第1点和第2点的类似get请求
  • 达到上述终点的另一种方法是(仅考虑第1点和第2点):

    /学生/{studentid}/论文

    然后在请求正文中传递departmentid。应用程序将检查请求中是否存在departmentId。如果它不为空,那么它将假定这篇论文是为给定的部门ID发布的,否则为学生自己发布的


    以上哪一项是更好的方法

    由于
    departmentid
    是资源标识的一部分,因此它必须是URL的一部分。将其放入请求正文违反了REST原则。

    此链接可以帮助您设计REST式服务:

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

    • 标识资源的所有内容都应位于资源路径内(例如
      departmentid
    • 关于关系,我们需要确定哪些URL将处理引用。例如,
      /students/{studentid}/departments/{departmentid}/papers
      将允许将现有的论文附加到一个部门,或者创建一个新的论文,并将其附加到该部门
    • 我不明白这个url:
      /students/{studentid}/papers/self
      特别是标记
      self
      self
      是否指当前经过身份验证的用户?如果是这样,我认为应该使用一个查询参数,因为它实际上并不对应于资源。。。实际上,您更愿意使用查询参数进行列表筛选
    希望它能帮助你,
    Thierry

    url/students/{studentid}/papers/self实际上指的是仅为用户而不是为部门发布的论文。用户还可以访问属于其所属部门但未由其发表的论文。另外,对于将现有论文附加到用户,我是否会在URL中传递paperId并将其作为post请求提交?