深入了解 PUT 和补丁请求。开发人员或程序员应该知道和请求之间的区别。似乎两者都在修改资源中的数据。仅此而已吗?或者,如果在面试中问过你这个问题,你现在会怎么回答?PUTPATCH今天我们就来聊聊这个话题。
1. 安全和幂等 HTTP 方法
安全方法
在 REST API 的上下文中,安全方法是不修改资源的 HTTP 方法。例如,在 上使用 GET 或 HEAD 永远不应更改资源。安全方法是可以缓存和预取而对资源没有任何影响的方法。Request URI
在实践中,通常不可能以不改变任何资源的方式实现安全方法。例如,GET 请求可能会创建日志或更新统计信息值,或者在服务器上触发缓存刷新。
无法确保服务器不会因执行 GET 请求而产生副作用。这里的重要区别在于API消费者没有请求副作用,因此消费者不能对它们负责。
请求 URI 是应用请求的资源的统一资源标识符。
幂等方法
如果一个或多个 HTTP 方法的调用对资源具有相同的预期效果,则将此方法视为 。如果该方法只被调用了一次或三次,这应该无关紧要。资源上的结果应始终相同。idempotent
Idempotency本质上意味着成功执行的请求的结果与它被执行的次数无关。
注意:当您发送多个 DELETE 请求时,第一个请求将删除资源,响应为 200(正常)或 204(无内容)。下一个请求返回 404(未找到)。响应与第一个请求不同,但由于原始资源已被删除,因此服务器端的任何资源的状态都没有变化。因此,删除是幂等的。
2. 看跌期权请求
该方法完全修改现有资源或创建新资源。它是如何做到的?PUT
API 使用者发送资源 ID
如果资源存在,则整个资源将替换为整个实体
如果资源不存在,则会创建一个新资源
例如,如果要更改数据库中用户的名字,则需要在发出请求时发送整个实体。PUT
要发出请求,您需要发送所有参数,而不仅仅是名称;此示例的第一个和姓氏。PUT
如果成功更新,则成功的请求将返回 of 或 of,如果预期资源尚无当前表示形式,并且请求创建一个表示形式,则源服务器必须向 API 使用者发送 of 响应。PUTHTTP Status Code200 (OK)HTTP Status Code204 (No Content)PUTHTTP Status Code201 (Created)
3. 为什么 PUT 请求是幂等的
此处,请求包含此用户的所有参数。PUT
使用请求时,假定您正在发送完整的实体,并且完整的实体将替换 处的任何现有资源。 请求通过替换整个资源来处理它。PUT Request URIPUT
由于请求包括整个实体,因此如果您重复发出相同的请求,它应该始终具有相同的结果(您发送的数据现在是资源的全部数据)。PUT
如果您发送请求5次,则第一个请求将更新资源;其他 4 个请求将一次又一次地覆盖相同的资源状态 — 实际上不会更改任何内容。PUT
因此,该请求是幂等的。PUT
4. 补丁请求
该方法将部分更新应用于现有资源。这意味着您只需要发送要更新的数据,而不会影响或更改任何其他内容。因此,如果要更新数据库中的名字,则只需发送第一个参数。对于上面的示例,此参数是第一个名称。PATCH
API 使用者发送资源 ID
如果资源存在,则会部分更新现有资源(并非所有实体都是必需的)。
如果资源不存在,则返回 ofHTTP Status Code404 (Not Found)
成功的请求如果成功更新,则返回 of 或 of。PATCHHTTP Status Code200 (OK)HTTP Status Code204 (No Content)
5. 为什么 PATCH 请求是非幂等的
该方法更新资源的一小部分。例如,如果使用请求更新资源,并且未设置所有字段,则可能会丢失留空字段中的数据。 request 修复了此问题,因为它仅更新请求正文中声明的特定部分。PATCH PUT PATCH
PATCH请求并不总是保证相同的效果,所以它不是。换句话说,它可能会影响 的不同部分的更改。idempotent Request URI
在上面的示例中,只需更改用户资源的名字字段。然后向同一资源发出请求并修改同一资源的不同字段。Request URI
在前两个示例中,在第一个请求中修改了第一个姓名字段,在第二个请求中修改了姓氏字段。结果,向同一资源发出了两个请求,并在每个请求上获得了不同的结果。
对方法的此更改会根据要更新的资源部分提供不同的结果。因此,不是幂等的。PATCH PATCH
高级说明: 可以使用 和 HTTP 标头使请求具有幂等性。PATCH ETagIf-Modified-Since
6. 何时使用 PUT 和补丁请求
当 API 使用者需要完全替换现有资源时,使用者可以使用该方法。当使用者想要进行部分更新时,他们可以使用该方法。PUT PATCH
例如,在更新资源的单个字段时,发送整个实体表示形式可能会很麻烦,并且会占用大量不必要的带宽。在这种情况下,该方法的使用更有意义。PATCH
7. PUT 和补丁请求之间的差异
和 请求之间的主要区别在于服务器处理发送的实体以更新由 标识的资源。发出请求时,发送的实体被视为保存在原始服务器上的资源的修改版本,并且 API 使用者请求对其进行更改。但是,随请求一起发送的实体具有一组说明,这些说明描述了如何部分修改存储在原始服务器上的资源以创建新版本。PUT PATCH Request URI PUT PATCH
这里要考虑的另一个重要方面是幂等性。该方法是幂等的,该方法可以是幂等的,但不是必需的。您可以根据实现位置选择一个或另一个。PUT PATCH
结论
希总结一下本文,这些方法之间的主要区别在于幂等的,以及它们如何处理来自 API 使用者的请求。在面试中可能会问到你这个问题。
所有 HTTP 方法的范围和语义