rest - 补丁 http 方法的 REST full api 应该如何响应?
问题描述
我在服务器上有一个订单资源。url 看起来像http://example.net/order/1 以上 url 上的 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 上提供补丁方法,以便可以更新/添加一些细节,如送货地址。要更新订单详细信息,可以在同一订单网址上使用补丁 http 方法请求以下请求
{
"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 标准响应补丁请求应该有什么?或者是否有任何文档可以找到有关 REST api 的响应数据和格式的信息。
解决方案
我的问题是根据 REST 标准响应补丁请求应该有什么?或者是否有任何文档可以找到有关 REST api 的响应数据和格式的信息。
根据RFC 5789,成功的响应可以返回任何成功代码(即 200 或 204)。理想情况下,它还应该包含一个 ETag 标头,以允许客户端跟踪当前版本的最终连续请求(这基本上用于对资源状态的乐观锁定)。
规范提供了一个204 No Content
样本作为补丁,松散地说,由客户端计算的一组指令组成,服务器应该应用这些指令将目标资源转换为所需的状态。所以客户端事先知道最终结果应该是什么样子,因此服务器不需要通知客户端。
如果您想返回200 OK
响应,我建议返回Accept
客户端发出的请求标头建议的表示(内容类型协商),以避免强制客户端某些预定义的媒体类型格式,它可能无法理解或推断出进一步的可能性.
如果您需要对资源应用不可预测的更改,即基于在服务器端完成的一些计算或将有效负载包含到某个预定义元素(可能在您的示例中完成),RFC 5789 明确指出POST
应该使用而不是PUT
或PATCH
. 进一步注意,您可以支持RFC 7386application/merge-patch+json
中定义的媒体格式及其语义,以将这样的(样本)主体作为有效负载发布到请求中,但可能会达到您想要的结果。PATCH
推荐阅读
- odbc - 在 Windows 上从 pyodbc 连接到 MarkLogic ODBC 服务器时出错
- javascript - google.script.run 执行但它返回“null”,而 code.gs 函数确实有/log 值要返回
- .net - 在 DNN 和 Microsoft Dynamics CRM 中同步用户
- typescript - 如何用双箭头函数编写 Typescript 界面
- c++ - 为什么我可以访问类外的私有结构成员
- node.js - 打印股票图表时代码中出现不需要的循环
- javascript - 如何摆脱隐藏元素造成的额外空白?
- rust - 如何在 Warp 中创建可变路径?
- java - 在调用 add() 之前设置约束两次
- java - 我如何序列化和反序列化前缀树?