2015-03-25 73 views
0

假设anapplication的域结构如下:宁静的URI设计

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

以下是我觉得宁静的URI的设计应该是这样

  1. 学生创建(POST)一张白纸给自己:
    /学生/ {} studentid /论文
  2. 学生创建(POST)白色 纸特定部门
    /学生/ {studentid} /部门/ {DepartmentID的} /论文
  3. 找他为自己 /学生/ {studentid}发布的所有学生论文/纸/自
  4. 找他自己出版的所有学生的论文,包括论文部门 他所属 /学生/ {} studentid /论文
  5. 的点号1和2
  6. 类似的GET请求

的另一种方法在上述终点到达会是这样的(只考虑点1和2):

/生/ {studentid} /文件

,然后在请求体通过DepartmentID的。应用程序将检查请求中是否存在departmentId。如果它不是零,那么它会假设这篇论文正在为给定的部门出版,否则就是这个学生本人。

上面哪一个是更好的方法?

回答

1

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

此外,这里是我关于你的URL评论:

  • 识别你的资源应该是资源路径中的所有内容(例如departmentid
  • 关于关系,我们需要找出哪些网址处理参考。例如,/students/{studentid}/departments/{departmentid}/papers将允许将现有的纸张附加到部门或创建一个新的部门,并附加到部门
  • 我不明白这个网址:/students/{studentid}/papers/self特别是令牌selfself是否指当前经过身份验证的用户?如果是的话,我认为应该使用的查询参数,因为它并没有真正对应的资源......其实,你宁愿使用查询参数列表过滤

希望它可以帮助你, 蒂埃里

+0

url/students/{studentid}/papers/self实际上是指仅为用户发布而不是为部门发布的论文。用户可以访问属于他所属部门但未由他出版的那些文件。同样为了将现有的论文附加到用户,我不会将URL中的paperId传递给它并作为发布请求提交吗? – user3244615 2015-03-25 12:12:56

1

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

+0

完全是我的想法 – user3244615 2015-03-25 09:09:06