使用HTTP PATCH - 真实示例

时间:2017-03-30 06:57:00

标签: javascript http

我试图找出如何在我的应用程序中实现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

令我困惑的是,如果我要实现PATCH,唯一改变的是路由器,我使用PATCH。我还使用userId查找用户并更改其电子邮件。我错过了什么?这是怎么回事?

1 个答案:

答案 0 :(得分:1)

你没有遗漏任何东西。 PUT和PATCH之间的区别在语义上更为明显。该方法本身不会在HTTP级别提供更多附加信息/要求。根据{{​​3}},使用PUT或PATCH取决于您的服务器端逻辑:

  

PUT和PATCH请求之间的区别反映在      服务器处理封闭实体以修改资源的方式      由Request-URI标识。

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

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

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