我试图找出如何在我的应用程序中实现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查找用户并更改其电子邮件。我错过了什么?这是怎么回事?
答案 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'
}