0

我想知道在哪里放置编辑,以及休息应用程序的新关键字。我将在项目中使用 express-resource,默认设置如下:

GET     /forums              ->  index
GET     /forums/new          ->  new
POST    /forums              ->  create
GET     /forums/:forum       ->  show
GET     /forums/:forum/edit  ->  edit
PUT     /forums/:forum       ->  update
DELETE  /forums/:forum       ->  destroy

这个解决方案有一个问题:new 和 edit 背后没有真正的资源。我的意思是 URL-s 指的是资源,在任何斜线之后都是子资源。

例如:http://my.example.com/users/1表示:

var firstUser = {
   name: "John Smith",
   birthDate: new Date(1952,10,4),
   hobbies: ["skiing", "football"],
   ...
}

http://my.example.com/users/1/birthDate代表:

firstUser.birthDate

但是http://my.example.com/users/1/edit没有这样的属性:

firstUser.edit

所以这个概念有问题。

这些关键字的真正位置在哪里?在 queryString 或标题中?

4

2 回答 2

1

从 REST API 的角度来看,它们不存在于任何地方,因为它们与资源的表示无关。它们是对资源的操作,因此由使用的 HTTP 方法表示。如果您要创建使用 API 的外部客户端,则不需要它们。

可能需要为这种类型的功能提供一些支持,以便可以呈现 UI 之类的东西,但这是特定应用程序的关注点,而不是 API 本身的关注点。到那时,它就变得随意了,但我肯定会避免使用标题,因为这完全超出了常规做法。但是通过标题,您似乎实际上是指 URI 路径。在这两个中,我会说路径是更好的选择,因为它清楚地将任何类型的 UI 定义为不同的资源,并将其与干净的 API 分开,而在 API 的一部分上使用查询字符串会更紧密(错误地)将其与基础资源相关联。

于 2012-10-29T12:51:38.143 回答
0

一年左右的一些更新:

  • 编辑和新建应该是超链接
    • 这些链接只是可能的操作调用的表示
    • 通过跟踪它们,可以通过发送预期资源状态的表示和/或通过调用适当的方法来操纵它们所属的资源
  • 这些术语不是资源,它们没有自己的 URL(资源标识符)

感谢马特惠普尔的建议!

我认为学习 REST 的最佳方式是阅读Fielding 论文。那里有很多教程,但其中大多数的作者并不真正了解 REST。

于 2012-10-29T12:59:59.250 回答