您如何指示/请求删除 REST 补丁中的对象属性

cmc*_*loh 5 rest

是否有标准化的方法来指示 RESTful PATCH 请求中字段/参数的空值?

假设我有一个对象,我只想从对象中删除一个属性并将该更改保留到 MT/DB。在客户端,我只会删除属性(在 JS 中),但是当 PATCH 到我的 REST API 层时,是否有一种标准化的方法来指示应该删除属性(不是对象,只是属性)?

为了清楚起见/示例,这里是对象的假设 PATCH 路由:

PATCH /service/thing/{id}
Run Code Online (Sandbox Code Playgroud)

和一些示例 PATCH 有效载荷:

单一属性更新:

{ "myprop": "changed" }
Run Code Online (Sandbox Code Playgroud)

多属性更新:

{ "myprop": "changed", "anotherprop": "changed" }
Run Code Online (Sandbox Code Playgroud)

对于您想要摆脱的 PATCH,"myprop"显然不能只提交此有效负载:

{ }
Run Code Online (Sandbox Code Playgroud)

你会做这样的事情:

{ "myprop": undefined }
Run Code Online (Sandbox Code Playgroud)

或者,你会创建一个全新的 DELETE 路由:

DELETE /service/thing/{id}/myprop
Run Code Online (Sandbox Code Playgroud)

或者是其他东西?

sse*_*ano 4

我会PATCH按照你的建议实施。以接受部分表示进行更新的方式。

这样我就会始终发送JSON部分表示。

PATCH { "myprop": "newvalue" }
Run Code Online (Sandbox Code Playgroud)

并用于删除myprop空值。请求 a 时是否发回空值GET取决于您。您始终可以忽略null值(这与空不同)。

PATCH { "myprop": null }
Run Code Online (Sandbox Code Playgroud)

注意null而不是undefined. null是一个JSON值。但这只是我的2分钱。