什么是最好/常见的RESTful url动词和动作?

时间:2008-11-02 01:08:18

标签: rest

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

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

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

HMM。感谢任何人帮忙:))

5 个答案:

答案 0 :(得分:166)

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

注意你刚才提到的不是RESTful:

/questions/show/<whatever>

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

/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来创建URL。这应该导致资源找不到错误,因为还不存在。您应该首先在服务器上放置资源。你可以争辩说,通过创建一个新问题,你也在更新/ questions资源,因为它现在会在问题列表中再回答一个问题。

你应该做这样的事情来使用POST创建资源:

POST /questions HTTP/1.1
Host: whateverblahblah.com

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

删除:

用于删除资源。

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

PUT:

用于在指定资源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 spec defines GET and POST for the form element

  

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

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

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

<强> PATCH:

这是在正式RFC中定义的方法。它被设计用于当您希望仅对资源发送部分修改时,它将像PUT一样使用:

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

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

答案 1 :(得分:10)

假设/questions/10是一个有效的问题,那么该方法用于与之交互。

POST添加到它

PUT创建或替换它

获取查看/查询

并删除它......删除它。

网址不会改变。

答案 2 :(得分:3)

当你说“RESTful”网址时,我会说你的意思是你的意思是什么是MVC的标准控制器,因为你的例子可以被认为是非“RESTful”(见{{ 3}}文章)。

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

  

脚手架的行动和观点是:   索引,列表,显示,新建,创建,编辑,   更新,销毁

通常你会把它构造成:

http://application.com/controller/<action>/<id>

答案 3 :(得分:1)

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

/question/show/<whatever>

如果您将问题标识为资源,则它应具有唯一的网址。使用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)

田田:)

答案 4 :(得分:-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