88

我正在尝试查找有关最佳和最常见的 RESTful url 操作的一些信息。

例如,您使用什么 url 来显示项目的详细信息、编辑项目、更新等。

/question/show/<whatever>
/question/edit/<whatever>
/question/update/<whatever> (this is the post back url)
/question/list   (lists the questions)

唔。感谢任何帮助的人:)

4

5 回答 5

177

使用 URL 指定您的对象,而不是您的操作:

请注意,您首先提到的不是 RESTful:

/questions/show/<whatever>

相反,您应该使用您的 URL 来指定您的对象:

/questions/<question>

然后,您对该资源执行以下操作之一。


得到:

用于获取资源,查询资源列表,也用于查询资源的只读信息。

获取问题资源:

GET /questions/<question> HTTP/1.1
Host: whateverblahblah.com

列出所有问题资源:

GET /questions HTTP/1.1
Host: whateverblahblah.com

邮政:

用于创建资源。

请注意,以下是一个错误:

POST /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com

如果 URL 尚未创建,则在指定名称时不应使用 POST 创建它。这将导致资源未找到错误,因为尚不存在。您应该首先将资源放在服务器上。您可能会争辩说,通过创建一个新问题,您也在更新 /questions 资源,因为它现在将在其问题列表中返回一个问题。

您应该这样做以使用 POST 创建资源:

POST /questions HTTP/1.1
Host: whateverblahblah.com

请注意,在这种情况下,未指定资源名称,新的对象 URL 路径将返回给您。

删除:

用于删除资源。

DELETE /questions/<question> HTTP/1.1
Host: whateverblahblah.com

放:

用于在指定资源 URL 时创建或覆盖资源。

对于新资源:

PUT /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com

要覆盖现有资源:

PUT /questions/<existing_question> HTTP/1.1
Host: whateverblahblah.com

...是的,它们是一样的。PUT 通常被描述为“编辑”方法,因为通过将整个资源替换为稍有改动的版本,您已经编辑了客户端下次执行时将获取的内容。


在 HTML 表单中使用 REST:

HTML5 规范为表单元素定义了 GET 和POST 。

方法内容属性是具有以下关键字和状态的枚举属性:

  • 关键字GET,映射到状态GET,表示HTTP GET方法。
  • 关键字POST,映射到状态POST,表示HTTP POST方法。

从技术上讲,HTTP 规范并不仅限于这些方法。从技术上讲,您可以自由添加任何您想要的方法,但在实践中,这不是一个好主意。这个想法是每个人都知道你使用 GET 来读取数据,所以如果你决定使用 READ 来代替它会混淆事情。那就是说...

修补:

这是在正式 RFC 中定义的方法。它旨在用于当您希望仅发送对资源的部分修改时,它的使用方式与 PUT 非常相似:

PATCH /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com

不同之处在于 PUT 必须发送整个资源,无论它与实际更改的内容相比有多大,而 PATCH 您可以发送更改。

于 2008-11-02T01:20:10.343 回答
11

假设/questions/10是一个有效的问题,然后使用该方法与之交互。

POST 添加到它

PUT 创建或替换它

GET 来查看/查询它

和删除到好..删除它。

网址不变。

于 2008-11-02T01:14:14.647 回答
3

当您说“RESTful”网址时,我会冒昧地猜测您的意思是 MVC 的标准控制器,因为您的示例可能被视为非“RESTful”(请参阅​​本文)。

由于 Rails 确实普及了您似乎感兴趣的 URL 样式,因此我在下面提供了由Ruby on Rails 中的ScaffoldingGenerator生成的默认控制器操作。任何使用 Rails 应用程序的人都应该熟悉这些内容。

脚手架的动作和视图是:索引、列表、显示、新建、创建、编辑、更新、销毁

通常,您会将其构造为:

http://application.com/controller/<action>/<id>
于 2008-11-02T01:33:08.743 回答
1

以下是使用 REST 原则对当前 URL 的映射:

/question/show/<whatever>

如果您将问题标识为资源,那么它应该有一个唯一的 URL。使用 GET 来显示它(检索它)是常见的做法。它成为了:

GET /question/<whatever>

/question/edit/<whatever>

现在,您希望您的用户拥有相同资源的另一个视图,允许他编辑资源(可能带有表单控件)。

这里有两个选项,您的应用程序是一个应用程序(不是网站),那么您最好使用 JavaScript 将资源转换为客户端上的可编辑资源。

如果这是一个网站,那么您可以使用带有附加信息的相同 URL 来指定另一个视图,常见的做法似乎是:

GET /question/<whatever>;edit

/question/update/<whatever> (this is the post back url)

这是为了改变问题,所以 PUT 是正确的使用方法:

PUT /question/<whatever>

/question/list   (lists the questions)

问题列表实际上是一个问题的父资源,所以它自然是:

GET /question

现在你可能需要更多:

POST /question (create a new question and returns its URL)
DELETE /question/<whatever> (deletes a question if this is relevant)

多田 :)

于 2008-11-04T23:31:02.310 回答
-1

你的四个例子可能是:

GET /questions/123
POST (or PUT) /questions/123 q=What+is+the+meaning+of+life
POST (or PUT) /questions/123 q=What+is+the+meaning+of+life
GET /questions

添加问题:

POST /questions q=What+is+the+meaning+of+life

服务器将响应:

200 OK (or 201 Created)
Location: /questions/456
于 2009-07-04T07:32:46.660 回答