RESTful API在使用PATCH HTTP方法时应该返回什么响应?

4

我在服务器上有一个订单资源,其URL看起来像http://example.net/order/1。 上述网址的GET方法将返回整个订单对象,例如:

    {
    "orderNo": "1",
    "status": "order place",
    "orderTimestamp": "2018-11-22 14:28:12",
   "invoiceAddress": {
        "salutation": "M",
        "firstName": "Dieter",
        "lastName": "Wolf",
        "companyName": "",
        "street": "Michaelkirchstr.",
        "houseNo": "16",
        "zipCode": "31604",
        "city": "Raddestorf",
        "countryIsoCode": "DEU",
        "phone": "05763 82 60 80",
        "email": "DieterWolf@armyspy.com"
    },
    "deliveryAddress": {}
    "items": [
        {
            ...
        }
    ],
    "returnItemsDetails": []
}

现在,我希望在同一个API上提供补丁方法,以便用户可以更新/添加一些详细信息,如送货地址。要更新订单详情,用户可以通过PATCH HTTP方法在同一订单URL上请求以下请求。
{
    "deliveryAddress": {
        "deliveryType": "CUSTOMER",
        "salutation": "M",
        "firstName": "Dieter",
        "lastName": "Wolf",
        "companyName": "",
        "street": "Michaelkirchstr.",
        "houseNo": "16",
        "zipCode": "31604 ",
        "city": "Raddestorf",
        "countryIsoCode": "DEU",
        "phone": "05763 82 60 80",
        "email": "DieterWolf@armyspy.com"
    }
}

我的问题是,根据REST标准,patch请求的响应应该包含什么?或者有没有文档可以了解REST api的响应数据和格式。

可能值得一看 https://dev59.com/S1oU5IYBdhLWcg3wM04H - codebrane
2个回答

8
我的问题是,根据REST标准,补丁请求的响应应该包含什么?或者有没有文档可以查找REST api的响应数据和格式。
根据RFC 5789,成功的响应可以返回任何成功代码(即200或204)。最好还应包含ETag标头,以允许客户端跟踪当前版本以进行后续请求(这基本上用于资源状态的乐观锁定)。
规范提供了一个204 No Content示例,因为补丁包含一组由客户端计算的指令,服务器应将其应用于转换目标资源以达到所需状态。因此,客户端预先知道最终结果应该是什么样子,因此服务器不需要通知客户端。
如果要返回200 OK响应,则建议返回由客户端发出的Accept请求标头建议的表示形式(内容类型协商),以避免强制客户端使用可能不理解或推断更多可能性的预定义媒体类型格式。
如果您需要对资源进行不可预测的更改,例如基于服务器端的某些计算或将有效负载包含到某个预定义元素中(如您的示例中可能已完成的操作),RFC 5789明确规定应使用POST而不是PUTPATCH。此外,请注意,您可以支持application/merge-patch+json媒体格式及其在RFC 7386中定义的语义,以将此类(示例)主体作为有效负载发出到PATCH请求,并可能实现所需的结果。

2
根据REST标准,Patch请求的响应应该包含什么内容?或者有没有相关文档可以提供REST api的响应数据和格式呢?
RFC 5789中定义了Patch请求。第二节表明,一种可能的方法是返回资源的更新表示:
“只有当方法响应包含显式新鲜度信息(例如Expires头或“Cache-Control:max-age”指令)以及Content-Location标题与Request-URI匹配时,响应才可缓存,表示PATCH响应体是资源表示。”
但我没有找到更普遍情况的规定。因此,我建议将RFC 7231中PUT和DELETE的规范解释也应用于PATCH。
“操作结果的表示形式”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接