背景信息分析:

根据 RFC 2616,第 9.5 条,POST 用于创建资源:

使用 POST 方法要求原始服务器接受请求中包含的实体作为请求-URI 在请求线中识别的资源的新子属。

根据 RFC 2616,第 9.6 条,PUT 用于创建或取代资源:

PUT 方法要求关闭的实体存储在提供的请求-URI. 如果请求-URI 提到已经存在的资源,关闭的实体 SHOULD 将被视为居住在原始服务器的修改版本. 如果请求-URI 没有指向现有资源,并且 URI 能够由请求用户年龄定义为新资源。

我的问题:

那么,哪种HTTP方法应该用于创建资源?或者两者都应该得到支持?


当前回答

或者你可以这样做:考虑你的不安全的请求作为一个极端的单用户资源(让我们称之为行动)。客户要求一个新的“行动”在一个有意义的资源与一个空的POST到资源。

在告诉我这不是RESTful之前,请考虑遵守REST原则的众多方式. 客户不构建URL. API 仍然可发现,尽管在语法中有点变化. HTTP 字母被适当使用. 如果你认为这是一个巨大的变化来实施,我可以从经验中告诉你,这不是。

其他回答

两者都用于客户端到服务器之间的数据传输,但它们之间存在微妙的差异,即:

PUT POST
Replacing existing resource or creating if resource is not exist. www.example.com/com/customer/{customerId} www.example.com/com/customer/123/order/{orderId} Identifier is chosen by the client. Creating new resources and subordinate resources, e.g. a file is subordinate to a directory containing it or a row is subordinate to a database table. www.example.com/com/customer/ www.example.com/com/customer/123/order/ identifier is returned by server
Idempotent i.e. if you PUT a resource twice, it has no effect. Example: Do it as many times as you want, the result will be same. x=1; POST is neither safe nor idempotent. Example: x++;
Works as specific Works as abstractive
If you create or update a resource using PUT and then make that same call again, the resource is still there and still has the same state as it did with the first call. Making two identical POST requests will most likely result in two resources containing the same information.

类似:

PUT 即采取并放置它在哪里. POST 如发送邮件在邮局。

此分類上一篇

社交媒体/网络分析:

社交媒体上的帖子:当我们发布消息时,它会创建新的帖子(即编辑)我们已经发布的帖子。

您可以在网页上找到声明说

也不是很正确。


最好选择 PUT 和 POST 之间,基于行动的可行性。

PUT 意味着放置一个资源 - 完全取代在特定 URL 上可用的任何东西与不同的东西. 根据定义,一个 PUT 是无能为力. 尽量尽量多次,结果是相同的. x=5 是无能为力. 你可以 PUT 一个资源,无论它以前存在,还是不存在(例如,创建,或更新)!

POST 更新一个资源,添加一个子资源,或引发一个变化. 一个 POST 不是 idempotent,因此 x++ 不是 idempotent。


根据这个论点,PUT是为了创建,当你知道你将创建的东西的URL。POST可以用来创建,当你知道“工厂”的URL或管理者为你想要创建的东西类别。

如:

POST /expense-report

或:

PUT  /expense-report/10929

在很简单的方式,我正在采取Facebook时间线的例子。

案例1:当你在时间表上发布某些东西时,这是一个新鲜的新输入,所以在这种情况下,他们使用POST方法,因为POST方法是无效的。

案例2:如果你的朋友第一次评论你的帖子,它也会在数据库中创建一个新的帖子,以便使用POST方法。

案例3:如果你的朋友编辑他的评论,在这种情况下,他们有一个评论 ID,所以他们将更新一个现有评论而不是创建一个新的数据库输入。

在单行中,使用 POST 在数据库中添加一个新的输入和 PUT 在数据库中更新一些东西。

使用 POST 创建,而 PUT 更新,这就是 Ruby on Rails 如何做到这一点。

PUT    /items/1      #=> update
POST   /items        #=> create

POST: 使用它来创建新的资源. 它类似于 INSERT (SQL 声明) 具有自动增强 ID. 在回复部分中,它包含一个新生成的 ID。

POST 也用于更新记录。

PUT:使用它来创建一个新的资源,但在这里我知道身份密钥,它就像INSERT(SQL声明),在那里我提前知道身份密钥。

PUT 也用于更新资源