PATCH
用于更新现有资源的部分信息,PUT
用于将新资源的旧信息替换为新资源。现在,如何在AngularJS中实现这个概念?
一种可能的方式可能是: -
在控制器上,计算用户通过表单更改的字段数,并设置一个阈值,如50%,即如果用户更新了超过50%的表单字段,则调用
$http.put
或以其他方式致电$http.patch
。
有没有标准的方法来应用这个概念,或者上面提到的方法也是正确的方向?
答案 0 :(得分:1)
这取决于API如何建立应在其每个资源上使用的请求类型。
在一个理想的世界里,你会:
POST
在资源集合上创建资源。例如POST /v1/cars
的两个请求会导致/v1/cars/1
和/v1/cars/2
被创建。PUT
更新资源属性,理想情况是在所有属性都被更改时,即使它们保持相同的值。请求主体(有效负载)应包含所有属性。 PUT是幂等的,这意味着如果您使用相同的请求主体(有效负载)发出两个请求PUT /v1/cars/1
,则会生成标识为1的汽车,并使用属性进行更新。 N个相同的请求以相同的更新/修改的实体表示结束。 PATCH
对资源执行部分修改。因此,如果您只更新汽车1上的品牌和型号,而不是价格,那么只要API支持,PATCH就是理想的选择。最终,实际上,要回答您的问题,无论是谁创建您正在使用的API(您的后端),都将决定应该使用什么动词。所以实际上,你会看到POST用于upserts和更新,PUT用于创建,POST用于执行GET。
如果您可以控制您的angular.js应用依赖的后端,请尽可能贴近这些指南。但这些只是指导原则,它们不需要强制执行,而且很多时候您的业务需求要求您转移它们。因此,使用PATCH进行部分实体更新,使用PUT进行完整实体更新,或者仅使用PATCH进行部分实体更新(部分/完全)。你会发现什么对你有用。而忘记你在问题中写的百分比规则,这只会让事情复杂化。
我个人使用PATCH作为更新,或者部分完整。所以我不必支持我的API的两种更新资源的方法,因此我不支持PUT。但我的一些同事将他们的团队PUT用作PATCH。所以他们不支持PATCH。他们使用PUT进行部分更新,这对他们及其客户也有效。
答案 1 :(得分:0)
PUT用于创建,POST用于更新,请参阅PUT vs POST in REST
例如,您可以使用PATCH进行非常具体的更新,如果有关资源的某些信息被缓存而另一个信息没有被缓存,则可以单独使用PATCH和PUT作为明确的方法来区分哪一个将导致缓存刷新。< / p>
另一种思考方式是更新与其他资源有关系的复杂资源。
PATCH可用于添加与现有关系的关系,而POST将覆盖整个列表。
老实说我通常使用PUT来创建,但我不允许用PUT覆盖现有的entites,只有POST才能更新。
我基本上只关注部分HTTP,因为: