使用 HTTP PATCH - 真实示例



我正在尝试弄清楚如何在我的应用程序中实现HTTP补丁。我以前从未使用过它。我使用Express.js和sequelize(MySQL)。

我在SO和互联网上寻找现实生活中的例子,但找不到任何真正有价值的东西。这些链接让我更好地理解了什么是 PATCH,但我仍然没有看到它在我的案例中的好处。这一定是我错过了什么。

这是我的简化设置:

router:
basePath: 
controller: PutUser
method: PUT
path: /user/:userId/
Payload:
{email: 'newemail@hello.com'}
Controller:
Then here I find the user by its id and give the payload. User gets updated

让我感到困惑的是,如果我要实现一个补丁,唯一改变的是路由器,我改用补丁。我还使用 userId 来查找用户并更改其电子邮件。我错过了什么?这是应该的吗?

你没有错过任何东西。PUT和PATCH之间的区别在语义上更为相似。该方法本身在HTTP级别中没有提供太多额外的信息/要求。根据RFC5789,使用 PUT 或 PATCH 取决于您的服务器端逻辑:

PUT 和 PATCH 请求之间的差异反映在 服务器处理包含的实体以修改资源的方式 由请求 URI 标识。

因此,如果您的user资源有许多字段,例如电子邮件,姓名,地址,年龄等,那么如果您只想更改电子邮件,则PATCH是更好的选择。如果您的user资源只有电子邮件字段,或者如果您想重置所有字段信息,则PUT是更好的选择。

我猜你很困惑,因为这个"更新电子邮件"操作是一个"覆盖"操作,这使得它与PUT或POST非常相似。不过有一个更合适的示例(伪代码):

PATCH /user/<userId>
Payload:
{
patchField: 'age', 
patchOperation: 'X+1'
}

最新更新