rest post put

每个HTTP请求都包含一个方法 (有时称为verb ),该方法指示对标识的资源执行的操作。

在构建RESTful Web服务时,HTTP方法POST通常用于创建资源,而PUT用于资源更新。 尽管在大多数情况下这很好,但使用PUT进行资源创建也是可行的。 PATCH是资源更新的替代方法,因为它允许部分更新。

一般来说,我们可以说:

  • POST请求在服务器定义的URI上创建子资源。 POST也用作常规处理操作
  • PUT请求在客户端定义的URI处创建或替换资源
  • PATCH请求在客户端定义的URI上更新资源的一部分

但是,让我们进一步研究细节,看看如何在HTTP规范中定义这些动词。 这里的相关部分是HTTP RFC(2616)的第9节。

开机自检

RFC将POST的功能描述为:

POST方法用于请求源服务器接受请求中包含的实体作为请求行中Request-URI标识的资源的新下属。

这允许客户端创建资源而无需知道新资源的URI。 例如,我们可以向/ projects发送POST请求以创建一个新项目。 服务器现在可以将项目创建为/ project的新下属,例如: / projects / 123 。 因此,在使用POST进行资源创建时,服务器可以确定新创建的资源的URI(通常是ID)。

服务器创建资源时,它应以201(已创建)状态代码和一个指向新创建资源的Location标头进行响应。

例如:

请求:

 POST /projects HTTP/ 1.1  Content-Type: application/json  { "name" : "my cool project" , ...  } 

响应:

 HTTP/ 1.1 201 Created  Location: https: //cool.api.com/projects/123 

POST不是幂等的 。 因此,多次发送相同的POST请求可能会导致创建多个资源。 根据您的需求,这可能是一个有用的功能。 如果没有,则应该进行一些验证,并确保仅根据某些自定义条件(例如,项目名称必须唯一 )创建一次资源。

RFC还告诉我们:

POST方法执行的操作可能不会导致可以由URI标识的资源。 在这种情况下,适当的响应状态是200(确定)或204(无内容),这取决于响应是否包括描述结果的实体。

这意味着POST不一定需要创建资源。 它也可以用于执行一般操作(例如,开始批处理作业,导入数据或处理某些操作)。

POST和PUT之间的主要区别是请求URI的含义不同。 HTTP RFC说:

POST请求中的URI标识将处理封闭实体的资源。 [..]相反,PUT请求中的URI标识请求[..]内的实体,并且服务器不得尝试将请求应用于其他资源。

对于PUT请求,客户端需要知道资源的确切URI。 我们无法将PUT请求发送到/ projects,并且期望在/ projects / 123处创建一个新资源。 相反,我们必须将PUT请求直接发送到/ projects / 123 。 因此,如果我们要使用PUT创建资源,则客户端需要知道(如何生成)新资源的URI / ID。

在客户端能够为新资源生成资源URI / ID的情况下,PUT实际上应优先于POST。 在这些情况下,资源创建通常是幂等的 ,这是对PUT的明确提示。

可以使用PUT创建和更新资源。 因此,将PUT请求发送到/ projects / 123可能会创建项目(如果该项目不存在)或替换现有项目。 HTTP状态代码应用于通知客户端资源是否已创建或更新。

HTTP RFC告诉我们:

如果创建了新资源,则原始服务器务必通过201(已创建)响应通知用户代理。 如果修改了现有资源,则应发送200(确定)或204(无内容)响应代码以指示请求已成功完成。

一般来说,如果确切的资源URI是已知的并且操作是幂等的 ,则PUT通常是比POST更好的选择。 在大多数情况下,这使PUT成为更新请求的理想选择。

但是,对于资源更新,应该记住一个怪癖。 根据RFC,PUT应该用新资源替换现有资源。 这意味着我们无法进行部分更新。 因此,如果我们要更新资源的单个字段,则必须发送包含完整资源的PUT请求。

补丁

HTTP PATCH方法在RFC 5789中定义为对前面提到的HTTP RFC的扩展。 当使用PUT替换现有资源时,使用PATCH对资源进行部分修改。

引用RFC:

使用PATCH [..],封闭的实体包含一组指令,这些指令描述了应如何修改当前驻留在原始服务器上的资源以产生新版本。 PATCH方法影响由Request-URI标识的资源,并且可能对其他资源也有副作用。

因此,类似于POST的PATCH也可能会影响请求URI所标识资源以外的资源。

通常,PATCH请求使用与应更新的资源相同的格式,而忽略了不应更改的字段。 但是,不必一定是这种方式。 也可以使用单独的补丁格式 ,该格式描述了如何修改资源。

PATCH既不安全也不是幂等 。

也许您想知道在哪些情况下部分资源更新不是幂等的。 这里的一个简单示例是将项目添加到现有列表资源中,例如将产品添加到购物车中。 多个(部分)更新请求可能会将产品多次添加到购物车中。

翻译自: https://www.javacodegeeks.com/2020/02/rest-http-methods-post-vs-put-vs-patch.html

rest post put

rest post put_REST / HTTP方法:POST与PUT与PATCH相关推荐

  1. axios请求五种方法

    一.介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中. 可以提供以下服务: 1.从浏览器中创建XMLHttpRequests 2.从node.js创 ...

  2. java的人patch方法_java – Spring MVC PATCH方法:部分更新

    我有一个项目,我使用Spring MVC Jackson构建REST服务.让我们说我有以下java实体 public class MyEntity { private Integer id; priv ...

  3. HTTP请求方法:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE 说明

    平时的Rest开发,用到的都是GET,POST,PUT,DELETE类型的请求.但Rest支持的请求类型不止前面4种,还有其他几种. 超文本传输协议(HTTP, HyperText Transfer ...

  4. linux patch使用方法,Linux patch命令

    patch 英 [pætʃ]   美 [pætʃ] n.补丁,补片;眼罩;斑点;小块 vt.修补,拼凑;暂时遮掩一下;修理,平息(吵架等);用美人斑装饰(脸) vi.打补丁 第三人称单数: patch ...

  5. 图像相似度测量和模板匹配方法

    摘要 本文主要总结了进行目标跟踪.检测中经常使用到的图像相似度测量和模板匹配方法,并给出了具体的基于OpenCV的代码实现. 引言 模板匹配是一种在源图像中寻找与图像patch最相似的技术,常常用来进 ...

  6. buildroot package打patch方法

    我们修改了busybox的源码和配置文件,需要通过在buildroot package里面通过打patch的方式,并指定我们的配置文件进行编译: 1.制作patch方法说明 patch文件也叫补丁,就 ...

  7. 【深度学习】ToMe:我的方法无需训练即可加速 ViT 模型|搞懂Transformer系列

    作者丨科技猛兽 编辑丨极市平台 导读 这篇文章提出了一种无需训练即可加速 ViT 模型,提高吞吐量的方法 Token Merging (ToMe).ToMe 通过一种轻量化的匹配算法,逐步合并 ViT ...

  8. Json文件解析(下

    Json文件解析(下) 代码地址:https://github.com/nlohmann/json 从STL容器转换 任何序列容器(std::array,std::vector,std::deque, ...

  9. AI一眼识别这是什么鸟 “我们来找茬”十级选手诞生

    话说,你能看出这三只鹦鹉有什么不一样吗?脸盲如我,要使出玩"我们来找茬"的十级能力. AWSL,鹦鹉鹦鹉,傻傻分不清楚. 结果,AI一顿操作猛如虎,进行了判断:左边的是桃面牡丹鹦鹉 ...

最新文章

  1. 网络爬虫-python-爬取天涯求职贴
  2. css hack *html,CSS Hack详解
  3. java 快排_百度在年前会在打击一轮快排!
  4. Transaction处理中的权限控制
  5. 哈弗f5i潮配置参数_10万元起售的潮人新玩法,哈弗F5国潮版购车手册
  6. 山峰和山谷(信息学奥赛一本通-T1454)
  7. mysql查询系统年月_mysql每个月自动创建一张表,以年月做为表名,如何进行联合查询...
  8. 挖矿为什么要用显卡_你知道为什么挖矿用显卡,而不用CPU吗?
  9. Unity汉化字段重命名Inspector中字段属性时显示错位及其解决办法——Unity常见问题
  10. 华维实战小项目:教你如何用51单片机驱动步进电机
  11. 计算机PS考试都考哪些,计算机专业ps考试题(考查课)(10页)-原创力文档
  12. ie11不兼容 html编辑器,IE11下使用eWebEditor编辑器
  13. SpringBoot掌握的差不多了,就剩下一个Actuator没搞定了,本文详细来介绍!!!
  14. Ubuntu14.04 安装Firefox flash插件
  15. Docker-设置redis容器主从模式哨兵模式
  16. 我来对比一下阿里云服务器和腾讯云服务器的优劣和区别
  17. latex中文编号是问号的问题
  18. R语言实现 朴素贝叶斯分类
  19. C文件操作——文件的打开(fopen函数)和关闭(fclose函数)
  20. 2022-2028年中国骑行手套行业市场研究分析及投资前景规划报告

热门文章

  1. G List it all
  2. 【每日一题】7月20日题目精讲—着色方案
  3. 牛客网【每日一题】 合集
  4. 盲盒(随机概率 + 最大公约数)
  5. [2020.11.25NOIP模拟赛]下棋【dp】
  6. 信息学奥赛一本通1349-最优布线问题
  7. 【prim】【最小生成树】最优布线问题(ssl 1612)
  8. [NOI2019] 序列(模拟费用流)
  9. Summer Training day4 欧拉降幂
  10. Redis PK Memcached,哪个更牛叉