HTTP PATCH 请求可以创建资源吗?

Can a HTTP PATCH request create an resource?

如果 PATCH 请求应用于尚不存在的资源,是否允许创建该资源,或者在这种情况下我是否需要单独的 POST/PUT 请求?

PATCH 请求将转到 URL 以获取资源,例如:PATCH /object/1234。如果 ID 为 1234 的对象在数据库中,我将创建它,否则我将更新它。

PATCH 请求未包含所有字段,这就是我不使用 PUT 的原因。

RFC 5789 指出 PATCH 应该用于“修改现有的 HTTP 资源”。为了遵守 HTTP 标准,最好实施 POST/PUT 请求。

虽然服务器可以创建新资源(如 Heiko 的回答中所述),但建议您仅实施条件 PATCH,其中客户端发送 If-Unmodified-SinceIf-Match header,确保补丁仅应用于客户认为他们正在编辑的资源版本。有条件的 PATCH 请求排除了编辑 non-extant 资源的想法。如果客户端尝试发送没有前提条件的请求,正确的响应是 428 Precondition Required。参见 RFC 6585