【发布时间】:2015-05-28 12:53:25
【问题描述】:
HTTP PATCH 用于资源的部分更新。根据我的理解,可以对与 PATCH 相关的资源进行以下更新(可能更多,但我需要确切知道这两者的处理方式不同)
- 更新客户资源中的手机号码等字段
- 在现有客户资源上添加新的电话号码字段,例如电话号码[4] 作为新字段引入
我只想知道 PATCH 是否应该处理第二种情况?如果是,那么它应该如何以及它与第一个有什么不同?
【问题讨论】:
标签: rest
HTTP PATCH 用于资源的部分更新。根据我的理解,可以对与 PATCH 相关的资源进行以下更新(可能更多,但我需要确切知道这两者的处理方式不同)
我只想知道 PATCH 是否应该处理第二种情况?如果是,那么它应该如何以及它与第一个有什么不同?
【问题讨论】:
标签: rest
PATCH 需要一种能够描述一组更改以修改目标资源的文档格式。格式本身并没有被 HTTP 标准化,您可以选择要使用的格式。这可能是一个简单的 diff 文件,或者是专为序列化格式设计的文件,例如 JSON-patch 格式。
考虑到这一点,PATCH 可用于任何可以由您决定使用的修补算法执行的部分更新。如果 Customer 资源的媒体类型允许将电话号码添加为新字段,那么使用 PATCH 来添加它是非常好的,前提是使用的修补算法可以执行添加。
【讨论】:
是的,您可以使用 PATCH 方法,但我认为在您的情况下(第二种情况)使用方法 POST 更方便:
POST /users/<userid>/phones
Content-type: text/plain
+33 3 12 34 56 78
201 Created
已编辑:
根据您的评论,PATCH 方法就是您所需要的。以下是一些可以帮助您为请求定义有效负载格式的链接:
否则您会注意到 OData 直接在负载中提供数据。请参阅此链接http://www.odata.org/getting-started/basic-tutorial/,“更新实体”部分。
希望对你有帮助, 蒂埃里
【讨论】: