如果将 PATCH 请求应用于尚不存在的资源,是否允许创建资源,或者在这种情况下我是否需要单独的 POST/PUT 请求?
请求将PATCH
转到资源的 URL,例如:PATCH /object/1234
. 如果 ID 为 1234 的对象在数据库中,我将创建它,否则我将更新它。
该PATCH
请求不包含所有字段,这就是我不使用PUT
.
如果将 PATCH 请求应用于尚不存在的资源,是否允许创建资源,或者在这种情况下我是否需要单独的 POST/PUT 请求?
请求将PATCH
转到资源的 URL,例如:PATCH /object/1234
. 如果 ID 为 1234 的对象在数据库中,我将创建它,否则我将更新它。
该PATCH
请求不包含所有字段,这就是我不使用PUT
.
RFC 5789声明 PATCH 应该用于“修改现有的 HTTP 资源”。为了遵守 HTTP 标准,最好实现 POST/PUT 请求。
虽然服务器可以创建新资源(如 Heiko 的回答中所述),但建议您仅实现 conditional PATCH
,其中客户端发送If-Unmodified-Since
orIf-Match
标头,确保补丁仅应用于客户端认为他们的资源版本正在编辑。条件PATCH
请求排除了编辑非现有资源的想法。如果客户端尝试在没有前置条件的情况下发送请求,则正确的响应是 428 Precondition Required。请参阅RFC 6585。