资源ID应该存在于网址中吗?

时间:2013-01-03 09:19:26

标签: ruby-on-rails url rest

在可以通过其他方式识别资源ID的情况下(例如,对于需要身份验证的页面,current_user),是否最好省略url中的id? (例如,/students/1/homework/students/homework)。

另外,这会对网址的安宁有什么影响吗?我怀疑它对HTTP动词有用,但对于自定义动作我不太确定。

3 个答案:

答案 0 :(得分:2)

我认为这取决于您的应用程序以及对客户有用的内容。如果您的连接用户是可以看到所有学生作业的管理员,那么/students/1/homework路径是有意义的,但是如果它只是学生使用此资源,那么/students/homework更有意义。
基本上后者可以被认为是所有学生资源的namespace 我发现通过namespaces分割这些资源非常有用,以免混淆客户编写者并使您的授权非常清晰(谁可以看到/做什么)。

答案 1 :(得分:1)

在您的示例中,2个URI标识不同的资源:

  • 用户#1的作业,
  • 当前用户的作业。

选择取决于您认为人们想要引用的资源(例如通过电子邮件或书签)。

我认为第二种解决方案并不合适,但我更倾向于第一种解决方案,因为它与许多其他功能兼容(例如,教师可以访问学生作业的表示)。

答案 2 :(得分:1)

网址应始终指向一个特定资源。它们可以是绝对的也可以是相对的。把它想象成一个文件系统。在某些情况下(安全性/可扩展性),您无法允许列表。

  • 基于会话/相对资源 /students/me/students/latest/students/latest/homework/lastest
  • 绝对资源 /students/3/students/3/homework/teachers/3/homework/3