javascript - 使用 HTTP PATCH - 真实示例

标签 javascript http

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

我看了SO并在互联网上寻找现实生活中的例子,但找不到任何真正有值(value)的东西。这些链接让我更好地理解了 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 来查找用户并更改其电子邮件。我缺少什么?这是应该的样子吗?

最佳答案

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

The difference between the PUT and PATCH requests is reflected in the way the server processes the enclosed entity to modify the resource identified by the Request-URI.

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

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

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

关于javascript - 使用 HTTP PATCH - 真实示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43110651/

相关文章:

javascript - Instagram 风格的帖子标题固定在页面顶部,然后被下一个替换

javascript - 鼠标悬停在具有不同图层的 d3.js map 上

javascript - 我需要一个不是 setTimeout() 的延迟

ruby - 如何使用 -X GET -G 选项将 curl 转换为 Ruby Net::HTTP?

java - Thymeleaf - 将变量传递给 Controller

Python:请求 session 登录 Cookie

javascript - 带有数值的 Switch 语句

javascript - 在本地文件系统上的 html 文件中包含 html 文件?

http.FileServer 缓存文件并在编辑后提供旧版本

java - 为什么我的 Android 应用程序中不断出现 java.net.ConnectException?