什么是最佳/常见的RESTfulurl动词和动作?

我试图find最好的和最常见的REST风格的url操作的一些信息。

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

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

哼。 感谢任何人帮助:)

使用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:

用于创build资源。

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

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

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

你应该这样做,使用POST创build一个资源:

 POST /questions HTTP/1.1 Host: whateverblahblah.com 

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

删除:

用于删除资源。

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

放:

用于创build资源或覆盖它,同时指定资源URL。

对于新的资源:

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

要覆盖现有资源:

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

…是的,他们是一样的。 PUT通常被描述为“编辑”方法,就像用一个稍微改变的版本replace整个资源,你已经编辑了下一次客户端将要获得的东西。


在HTML表单中使用REST:

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

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

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

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

补丁:

这是在正式RFC中定义的方法。 它被devise用来当你想发送一个资源的部分修改,它将被用来很像PUT:

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

不同之处在于,PUT必须发送整个资源,不pipe它与实际发生的变化相比有多大,而PATCH只能发送更改。

假设/questions/10是一个有效的问题,那么该方法被用来与它进行交互。

POST添加到它

PUT来创build或replace它

GET查看/查询它

并删除以及..删除它。

url不会改变。

我会走出去,猜测你说的“RESTful”URL是什么是MVC的标准控制器,因为你的例子可能被认为是非RESTful(见本文)。

由于Rails真正普及了您感兴趣的URL风格,因此我在Ruby on Rails中提供了由ScaffoldingGenerator生成的默认控制器操作。 任何使用Rails应用程序的人都应该熟悉这些。

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

通常你会这样构造:

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

以下是使用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) 

田田:)

你的四个例子可能是:

 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