什么是最佳/常见的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