zoukankan      html  css  js  c++  java
  • 关于PATCH与PUT的区别

    两者的区别:
    PATCH:更新部分资源,非幂等,非安全
    PUT:更新整个资源,具有幂等性,非安全
    注:
    幂等性:多次请求的结果和请求一次的结果一样
    安全性:请求不改变资源状态

    举个两者明显区别的例子(我对两者定义的理解):

    查询资源列表

    request:
    GET /users
    response:
    [
        {
            "id": 1
            "name": "xx"
            "description": "test xx",
            "phone": "127"
        }
    ]

    这时候提供个接口,支持修改名称和描述

    第一种:接口的HTTP方法定义为PUT:

    request:
    PUT /users/1
    {
        "name": "yy"
    }

    查询资源列表

    request:
    GET /users
    response:
    [
        {
            "id": 1
            "name": "yy"
            "description": null"phone": "127"
        }
    ]

    第二种:接口的HTTP方法定义为PATCH:

    request:
    PATCH /users/1
    {
        "name": "yy"
    }

    查询资源列表

    request:
    GET /users
    response:
    [
        {
            "id": 1
            "name": "yy"
            "description": "test xx""phone": "127"
        }
    ]

    然后还有一个疑问:在上面的场景,PUT和PATCH都是具有幂等性的,为什么说PATCH非幂等的?
    实际上,关于PATCH在定义中,还有另一种场景:通过PATCH发送一系列指令,并通过OP表示操作类型

    PATCH /users
    [
        { 
            "op": "add", 
            "path": "/", 
            "value": {
                "name": "zz",
                "description": "test zz""phone": "128"
            }
        },
        { 
            "op": "replace", 
            "path": "/1", 
            "value": {
                "name": "yy"
            }
        }
    ]

    查询资源列表

    request:
    GET /users
    response:
    [
        {
            "id": 1
            "name": "yy"
            "description": "test xx""phone": "127"
        },
        {
            "id": 2
            "name": "zz"
            "description": "test zz""phone": "128"
        }
    ]

    op表示对资源的操作,总共有六种:add,replace,remove,move,copy,test

    以上的例子都是按照PATCH与PUT的规定,进行举例,实际的的结果,是要根据代码逻辑来,就像有些人用POST方法去修改名称,只是说不规范,不是说不行。

    参考:
    https://stackoverflow.com/questions/28459418/rest-api-put-vs-patch-with-real-life-examples

  • 相关阅读:
    PatentTips
    PatentTips
    PatentTips
    PatentTips
    PatentTips
    PatentTips
    PatentTips
    PatentTips
    How to build and run ARM Linux on QEMU from scratch
    How to debug Android Native Application with eclipse
  • 原文地址:https://www.cnblogs.com/dj3839/p/11099367.html
Copyright © 2011-2022 走看看