【问题标题】:Can a PATCH request be used to create new fields for an already existing resource?可以使用 PATCH 请求为现有资源创建新字段吗?
【发布时间】:2021-02-05 10:25:13
【问题描述】:

我不确定是使用 POST 和 PATCH 的组合还是只为我的用例提供 PUT 请求更好。

如果我正在创建以下资源:

POST /customer
firstname: John
lastname: Smith
email: j.smith@web.com
(response -> customer created with id '1')

之后是否可以使用 PATCH 请求来更新一个现有值(在本例中为电子邮件)以及向资源添加新字段和值(出生日期)?

PATCH /customer/1
firstname: John
lastname: Smith
email: johnny.smith@gmail.com
dateofbirth: 1970-01-01

在这种情况下,出生日期已经是 swagger 定义的一部分。

【问题讨论】:

  • 简而言之,是的。虽然 PATCH 可能不是你想象的那样。它与软件开发中使用的传统补丁非常相似,其中补丁文档包含目标机器必须完全应用的指令,以便将资源更改为所需的结果。 Suggested reading
  • 您的问题听起来好像您正在发送带有请求标头字段的数据。这不是一个好主意。
  • @JulianReschke。数据将在体内。这只是一个非常简化的表示

标签: rest http api-design http-patch


【解决方案1】:

之后是否可以使用 PATCH 请求来更新一个现有值(在这种情况下为电子邮件)并向资源添加新字段和值(出生日期)?

是的。如果您可以在补丁文档中描述您想要进行的更改,那么您可以使用PATCH

您不需要在所有支持 PATCH 的资源上都支持 PUT,但是考虑到方法语义的相似性,不支持 PUT 的 PATCH 支持有点奇怪。

您通常希望使用标准化的补丁文件,而不是自己滚动。例如,对于 application/json 文档,您通常希望支持 application/merge-patch+jsonapplication/json-patch+json 或两者。

找到一个好的patch document representation for plain text 文件更难。

【讨论】:

    猜你喜欢
    • 2021-08-25
    • 2022-07-24
    • 2020-11-24
    • 1970-01-01
    • 2020-05-10
    • 2018-07-10
    • 2017-03-01
    • 2015-05-28
    • 2017-09-10
    相关资源
    最近更新 更多