PUT 与 POST – 它们之间的区别

PUT 和 POST 之间的主要区别

  • 当您需要修改单个资源时,会调用 PUT 方法;当您需要添加子资源时,会调用 POST 方法。
  • POST 方法响应可以被缓存,但 PUT 方法响应不能被缓存。
  • 您可以在 PUT 中使用 UPDATE 查询,而在 POST 中可以使用 create 查询。
  • 在 PUT 方法中,客户端决定资源应该具有的 URI;在 POST 方法中,服务器决定资源应该具有的 URI。
  • PUT 方法是明确的,而 POST 方法是抽象的。
  • 如果您多次发送相同的 PUT 请求,结果将保持不变;但如果您多次发送相同的 POST 请求,您将收到不同的结果。
  • PUT 方法是幂等的,而 POST 方法不是幂等的。
PUT vs POST
PUT 与 POST

什么是 PUT 方法?

PUT 方法用于更新服务器上的资源。通常,它用其他内容替换目标 URL 处的任何内容。您可以使用它来创建新资源或覆盖现有资源。PUT 请求要求将包含的实体存储在提供的请求 URI(统一资源标识符)下。

什么是 POST 方法?

POST 是 HTTP 支持的一种方法,它

表示 Web 服务器接受请求消息体中包含的数据。POST 通常被万维网用来将用户生成的数据发送到 Web 服务器,或者在您上传文件时使用。

REST API 中 PUT 和 POST 方法的区别

PUT 和 POST 方法之间最重要的区别如下:

PUT POST
此方法是幂等的。 此方法不是幂等的。
当您需要修改资源集合中已有的单个资源时,会调用 PUT 方法。 当您需要向资源集合添加子资源时,会调用 POST 方法。
RFC-2616 规定 PUT 方法发送一个请求,用于存储在提供的请求 URI 中的包含的实体。 此方法请求服务器接受包含在请求中的实体。
PUT 方法的语法是 PUT /questions/{question-id} POST 方法的语法是 POST /questions
您不能缓存 PUT 方法的响应。 POST 方法的答案可以被缓存。
PUT /vi/juice/orders/1234 表示您正在更新由“1234”标识的资源。 POST /vi/juice/orders 表示您正在创建一个新资源,并返回一个标识符来描述该资源。
如果您多次发送相同的请求,结果将保持不变。 如果您多次发送相同的 POST 请求,您将收到不同的结果。
PUT 方法是明确的。 POST 方法是抽象的。
我们在 PUT 中使用 UPDATE 查询。 我们在 POST 中使用 create 查询。
在 PUT 方法中,客户端决定资源应该具有的 URI。 在 POST 方法中,服务器决定资源应该具有的 URI。

PUT 的示例

这是 PUT 方法的 Web 服务器示例

HTTP PUT http://www.google.com/users/234

HTTP PUT http://www.google.com/users/234/accounts/567

请求

PUT /new.html HTTP/1.1
Host: example.com
Content-type: text/html
Content-length: 20

<p>New File</p>

响应

如果目标资源具有当前表示形式,并且通过包含的表示形式的状态进行了修改,则服务器应发送两个响应。第一个响应代码是 200 (OK),第二个响应代码是 204 (No Content)。

如果目标资源没有任何表示形式,则服务器应通过发送 201 代码 (Created) 响应来告知用户。

 HTTP/1.1 201 Created
Content-Location: /new.html

POST 的示例

POST 方法的示例

HTTP POST http://www.google.com/users

HTTP POST http://www.google.com/users/234/accounts

使用默认 application/x-www-form-urlencoded 内容类型的表单

POST /test HTTP/1.1
Host: abc.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 40

field1=value1&field2=value2

使用 PUT 请求测试 API

以下是使用 PUT 请求测试 API 的步骤

Testing an API with PUT Requests
使用 PUT 请求测试 API

第 1 步) 使用 PUT 请求更新资源。

第 2 步) 使用 GET 方法获取资源。如果 PUT 请求成功,您将收到新数据。如果请求中提供的数据无效,此方法将失败。因此,它不会更新任何内容。

使用 POST 请求测试 API

以下是使用 POST 请求测试 API 的步骤

Testing an API with POST Requests

使用 POST 请求测试 API

第 1 步) 使用 POST 请求创建一个资源,并确保它返回 200 状态代码。

第 2 步) 对该资源执行 GET 请求,并将数据保存到正确格式。

第 3 步) 您需要添加测试以确保 POST 请求因数据错误而失败。

PUT 方法的优势

以下是使用 PUT 方法的优点/好处

  • 它帮助您将提供的实体存储在提供的 URI 下
  • 如果提供的实体已存在,您可以执行更新操作,或者使用该 URI 进行创建。
  • 您可以按任意次数创建资源。
  • 使用 PUT 方法创建资源非常容易。
  • 您无需检查用户是否多次单击提交按钮。
  • 它可以识别请求中包含的实体。

POST 方法的优势

以下是使用 POST 方法的优点/好处

  • 此方法有助于您确定资源 URI。
  • 使用 location 标头指定新资源位置标头非常容易。
  • 您可以发送请求,将实体作为资源的新从属项,该资源由 URI 标识。
  • 您可以将用户生成的数据发送到 Web 服务器。
  • 当您不知道要保存资源的 URL 时,它非常有用。
  • 当您需要服务器控制您资源的 URL 生成时,请使用 POST。
  • POST 是一种安全的方法,因为它的请求不会保留在浏览器历史记录中。
  • 您可以使用 POST 轻松传输大量数据。
  • 您可以保持数据私密。
  • 此方法可用于发送二进制数据和 ASCII 数据。