当前位置: 首页 > 知识库问答 >
问题:

PUT、POST和PATCH之间有什么区别?

竺辉
2023-03-14

HTTP协议中的PUT、POST和PATCH方法有什么区别?

共有3个答案

苏畅
2023-03-14

下面的定义来自真实世界的示例。

示例概述
对于每个客户机数据,我们存储一个标识符以查找该客户机数据,并将该标识符发送回客户机供参考。

>

  • 职位

    • 如果客户端发送的数据没有任何标识符,那么我们将存储数据并分配/生成新的标识符
    • 如果客户端再次发送没有任何标识符的相同数据,那么我们将存储数据并分配/生成新标识符
    • 注:此处允许复制

    • 如果客户端发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将使用数据更新资源,否则我们将使用数据创建资源并分配/生成新标识符

    色斑

    • 如果客户端发送带有标识符的数据,那么我们将检查该标识符是否存在。如果标识符存在,我们将用数据更新资源,否则我们将引发异常。

    注意:在PUT方法中,如果找不到标识符,我们不会抛出异常。但是在PATCH方法中,如果找不到标识符,我们将抛出异常。

    如果您对上述问题有任何疑问,请务必告诉我。

  • 孔欣可
    2023-03-14

    PUT=用提供的新表示替换整个资源

    PATCH=用提供的值替换源资源的一部分AND|OR资源的其他部分被更新,你没有提供(时间戳)AND|OR更新资源效果其他资源(关系)

    https://laracasts.com/discuss/channels/general-discussion/whats-the-differences-between-put-and-patch?page=1

    漆雕博
    2023-03-14

    HTTP谓词中PUT、POST、GET、DELETE和PATCH之间的差异:

    最常用的HTTP动词POST、GET、PUT、DELETE类似于数据库中的CRUD(创建、读取、更新和删除)操作。我们在大写中指定这些HTTP动词。所以,下面是他们之间的对比。

    1. 创建-发布

    补丁:提交对资源的部分修改。如果只需要更新资源的一个字段,则可能需要使用PATCH方法。

    注意:
    由于POST、PUT、DELETE会修改内容,因此使用Fiddler对以下url进行的测试只是模仿更新。它实际上并没有删除或修改。我们只需查看状态代码即可检查是否发生了插入、更新和删除。

    网址:http://jsonplaceholder.typicode.com/posts/

    1)GET:

    GET是最简单的HTTP请求方法;浏览器在每次单击链接或在地址栏中键入URL时使用的链接。它指示服务器将URL标识的数据传输到客户端。决不能因为GET请求而在服务器端修改数据。从这个意义上讲,GET请求是只读的。

    用小提琴手或邮递员检查:我们可以用小提琴手检查响应。打开小提琴手并选择撰写选项卡。指定如下所示的动词和url,然后单击Execute检查响应。

    动词: GET

    url:http://jsonplaceholder.typicode.com/posts/

    响应:您将得到以下响应:

    用户id”:1,“id”:1,“标题”:“sunt aut…”,“body”:“quia et suscipit…”

    在“快乐”(或非错误)路径中,GET返回XML或JSON的表示形式和200(确定)的HTTP响应代码。在错误情况下,它最常返回404(未找到)或400(BAD REQUEST)。

    2) 职位:

    POST动词主要用于创建新资源。特别是,它用于创建从属资源。也就是说,从属于某个其他(例如父)资源。

    成功创建后,返回HTTP状态201,返回一个位置头,该位置头带有指向具有201 HTTP状态的新创建资源的链接。

    用小提琴手或邮递员检查:我们可以用小提琴手检查响应。打开小提琴手并选择撰写选项卡。指定如下所示的动词和url,然后单击Execute检查响应。

    动词:POST

    url:http://jsonplaceholder.typicode.com/posts/

    请求体:

    data:{title:'foo', body:'bar', userId: 1000, Id: 1000}

    响应:您将收到响应代码201。

    如果我们想检查Id=1000的插入记录,请将动词改为Get并使用相同的url,然后单击Execute。

    如前所述,上面的url只允许读取(GET),我们无法真正读取更新的数据。

    3)把:

    PUT最常用于更新功能,它与包含原始资源的新更新表示的请求体一起放入已知资源URI。

    用小提琴手或邮递员检查:我们可以用小提琴手检查响应。打开小提琴手并选择撰写选项卡。指定如下所示的动词和url,然后单击Execute检查响应。

    动词:把

    网址:http://jsonplaceholder.typicode.com/posts/1

    请求体:

    data:{title:'foo', body:'bar', userId: 1, Id: 1}

    响应:成功更新后,它从PUT返回200(如果不返回正文中的任何内容,则返回204)。

    4) 删除:

    DELETE很容易理解。它用于删除由URI标识的资源。

    成功删除后,返回HTTP状态200(OK)以及响应正文,可能是已删除项的表示(通常需要太多带宽)或已包装的响应(请参阅下面的返回值)。或者返回HTTP状态204(无内容),没有响应主体。换句话说,没有主体的204状态,或者JSEND样式的响应和HTTP状态200是推荐的响应。

    用小提琴手或邮递员检查:我们可以用小提琴手检查响应。打开小提琴手并选择撰写选项卡。指定如下所示的动词和url,然后单击Execute检查响应。

    动词:删除

    网址:http://jsonplaceholder.typicode.com/posts/1

    响应:成功删除后,它将返回HTTP状态200(OK)以及响应主体。

    PUT和PATCH之间的示例

    如果我必须更改我的名字,然后发送更新的PUT请求:

    {“first”:“Nazmul”,“last”:“hasan”}因此,为了更新名字,我们需要再次发送数据的所有参数

    补丁:

    补丁请求表示我们只会发送需要修改的数据,而不会修改或影响数据的其他部分。例如:如果我们只需要更新名字,我们只传递名字。

    有关更多信息,请参阅以下链接:

    https://jsonplaceholder.typicode.com/

    https://github.com/typicode/jsonplaceholder#how-to

    补丁和PUT请求之间的主要区别是什么?

    http://www.restapitutorial.com/lessons/httpmethods.html

     类似资料:
    • 我在Rails应用程序中使用了一个PUT请求。现在,浏览器已经实现了一个新的HTTP动词,补丁。因此,我想知道PATCH和PUT请求之间的主要区别是什么,以及何时应该使用其中一个。

    • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

    • 问题内容: 今天,我按照一些说明在Linux中安装软件。有一个脚本需要首先运行。它设置一些环境变量。 指令告诉我要执行,但是我执行错误了。因此未设置环境。最后,我注意到了这一点并继续进行。 我想知道这两种调用脚本方法的区别。我对Linux完全陌生,所以请尽可能详细。 问题答案: 运行脚本,将启动一个新的运行脚本的外壳。新的外壳程序不会影响启动脚本的父外壳程序。 是的简写形式,它将在当前shell中

    • 问题内容: 我刚开始使用Spring。我遇到了很多教程。我看到使用更多的例子比。我查看了Spring文档,但无法弄清楚使用其中一个的好处。有人可以提供一些解释吗? 问题答案: 是的便捷子类。 JavaDoc描述了一些添加的属性,这些属性在某些情况下可能有用: UrlBasedViewResolver的便利子类,它支持InternalResourceView(即Servlet和JSP)以及诸如Jst

    • 问题内容: 我刚刚看到了包含标签的CSS代码。我看着MDN看看是什么,但我真的不明白。 有人可以解释它是如何工作的吗? 它会在我们通过CSS选择之前创建DOM元素吗? 问题答案: 根据这些文档,它们是等效的: 唯一的区别是CSS3中使用了双冒号,而单冒号是旧版本。 推理: CSS 3中引入了:: before表示法,以便在伪类和伪元素之间建立区别。浏览器还接受:在CSS 2中引入的表示法。

    • 问题内容: 以下哪个更好? 要么 我知道的唯一区别是,当“ a”为null时,第一个返回false,而第二个抛出异常。除此之外,它们是否总是给出相同的结果? 问题答案: 使用时,你需要B在编译时知道类。使用时可以是动态的,并且可以在运行时更改。