经常会混淆HTTP的POST/PUT方法,因为这两个方法似乎都可以用来创建或更新一个资源。

区别是细微但清楚的:

POST 方法

用来创建一个子资源,如 /api/users,会在users下面创建一个user,如users/1;
POST方法不是幂等的,多次执行,将导致多条相同的用户被创建(users/1,users/2 ...
而这些用户除了自增长id外有着相同的数据,除非你的系统实现了额外的数据唯一性检查)

PUT 方法

PUT比較正确的定义是 Replace (Create or Update),
例如 PUT /items/1 的意思是替换 /items/1 ,如果已经存在就替换,沒有就新增;
因此,PUT方法一般会用来更新一个已知资源,除非在创建前,你完全知道自己要创建的对象的URI

http post put 区别

**在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别

举个栗子:

POST /api/articles
PUT /gists/:id/stars
如果产生两个**资源**,就说明这个服务不是idempotent(幂等的),因为多次使用产生了副作用;
如果后一个请求把第一个请求**覆盖**掉了,那这个服务就是idempotent的。
前一种情况,应该使用POST方法;
后一种情况,应该使用PUT方法。

PATCH 方法

PATCH方法是新引入的,是对PUT方法的补充,用来对已知资源进行**局部更新**
HTTP PATCH method require a feature to do partial resource modification.
The existing HTTP PUT method only allows a complete replacement of a document.

需要注意的地方

**语义** 而非 风格;是语义的问题,换句话说:
也就是这取决于这个REST服务的行为是否是idempotent(幂等的)
// 但是这个只是在语义上,同时不要太苛求语义
DELETE 刪除,無論如何 资源 最後都将不复存在
// PUT    替換(新增或完整更新)
// PATCH  部分更新

Examples from github api v3

create a gist
POST /gistsstar a gist
PUT /gists/:id/stars

设计 restful api 需要注意的问题

**名词复数**

URIs

names > verbs : 推荐使用具象化的名词而不是动词

plural > singular

Resource collections: /v1/users
Resource instances:   /v1/users/007

注: idempotent 幂等的

如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的;
idempotent的意思是如果相同的操作再執行第二遍第三遍,结果还是一样的。

so :

人们通常(为徒省事)把一个包含了修改后userName的完整userInfo对象传给后端,做完整更新。但仔细想想,这种做法感觉有点二,而且真心浪费带宽(纯技术上讲,你不关心带宽那是你土豪)。

于是patch诞生,只传一个userName到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。

put虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象,理论上说,如果你用了put,但却没有提供完整的UserInfo,那么缺了的那些字段应该被清空

RESTful HTTP中对POST,PUT,PATCH的区别相关推荐

  1. OpenFOAM中:点,线,面,体的概念区别(尤其是face和patch的区别)

    OpenFOAM中:点,线,面,体的概念区别(尤其是face和patch的区别) 个人理解如下: face:有序点(point)的集合,物理面的概念 patch:边界面(face)的集合(非内部面), ...

  2. Restful API 中的错误处理方案

    简介 随着移动开发和前端开发的崛起,越来越多的 Web 后端应用都倾向于实现 Restful API. Restful API 是一个简单易用的前后端分离方案,它只需要对客户端请求进行处理,然后返回结 ...

  3. 【接口文档】Django restful framework中自动生成API文档

    Django restful framework中自动生成API文档 一.Swagger概述 1.引言 当接口开发完成,紧接着需要编写接口文档.传统的接口文档使用Word编写,or一些接口文档管理平台 ...

  4. Linux中的Diff和Patch

    转自:https://www.cnblogs.com/cocowool/p/6409643.html Linux中的Diff和Patch 本文主要记录两个命令的学习情况:diff 和 patch.di ...

  5. SpringBoot RESTful 应用中的异常处理小结

    SpringBoot RESTful 应用中的异常处理小结 参考文章: (1)SpringBoot RESTful 应用中的异常处理小结 (2)https://www.cnblogs.com/Zomb ...

  6. RESTFUL风格中的405问题:JSPs only permit GET POST or HEAD

    RESTFUL风格中的405问题:JSPs only permit GET POST or HEAD 今天在学习RESTFUL风格的内容时,写完代码后遇到了如下图所示的405问题. 后台control ...

  7. 1.Cherry Pick与Create Patch的区别

    Cherry Pick与Create Patch的区别 结论 实验 场景1:应用时无冲突 场景2: 应用时产生冲突 使用cherry pick 使用patch 场景3:产生冲突,并且有其他文件的变更 ...

  8. java post和put的区别,ES 中的 POST 和 PUT 的区别

    0.什么是Restful架构 比较难说清楚,这部分大雾状态,引ruanyf 理解RESTful架构 的几句总结吧: Fielding将他对互联网软件的架构原则,定名为REST,即Representat ...

  9. sql语句中left join和inner join中的on与where的区别分析

    原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用 ...

  10. 无法解析 list 中的方法 iterator_Python-list中的append()和extend()方法区别

    一.append()和extend()方法都是用来添加数据到list末尾的,两者的区别: append()添加的时候会把添加的数据当成一个整体进行添加,允许添加任意类型的数据 extend()添加的时 ...

最新文章

  1. Java 静态变量,静态方法,静态常量(java static 关键字)
  2. 边缘计算的三种模式:MEC、微云和雾计算
  3. 7-7 12-24小时制 (C语言)
  4. VMware下centos7安装VMware Tools
  5. 学习笔记Spark(八)—— Spark SQL应用(3)—— Spark DataSet基础操作
  6. 数据压缩 第四次作业
  7. lamp ci框架 php配置文件,LAMP环境搭建
  8. HTML音乐播放没声音,网页没有声音但系统显示有声音怎么回事?如何解决?
  9. 懂得一些基本常识,就不会被《非酒精類致命飲料》或者叫做《我一辈子都不再喝可口可乐》的这篇文章所蒙蔽...
  10. TensorFlow基础(1)-中使用多个 Graph
  11. [转]Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
  12. codeforces 665E Beautiful Subarrays
  13. sql server express 2005下载地址
  14. 无线路由器密码破解-BT3-spoonwep2 (转http://www.ylmf.net/read.php?tid=1483881)
  15. 【精讲】软件工程用图的各个阶段及其应用(详细)系统流程图、数据流图、数据字典、ER图、状态转换图、层次方框图、Warnier图、IPO图、层次图、HIPO图、结构图、程序流程图、盒图等
  16. 为什么要用 Lightly 在线 IDE?
  17. uniapp h5浏览器文件下载
  18. 2020年中国海洋大学夏令营记录
  19. excel公式里用html,excel中value是什么函数?
  20. tv3描述文件代理服务器,超强悍技术贴!Apple TV3复活DNS的刷机全教程

热门文章

  1. 如何做好工作中的思考沉淀?
  2. DOM属性的增删改、属性的其他操作及DOM事件
  3. 3个月疫情倒闭了近90000家企业,为什么互联网公司每天都在招人?招聘一个程序员要多少成本
  4. 遇见流氓软件怎么才能卸载,文件夹删不掉显示被占用(小鸟,海螺,原始传奇等),到底应该怎么办?
  5. 群晖NAS软件之:Drive你会用吗?带你装逼!
  6. java POI 插入图片到Excel文件
  7. 自媒体人怎么修改视频的MD5值,实现很好地搬运
  8. phpstorm php-cs-fixer 格式化代码
  9. 组播路由协议——PIM基本概念
  10. shell脚本 把十进制数据转换成十六进制