何时在AngularJS

时间:2017-06-26 20:04:01

标签: javascript angularjs rest api

PATCH用于更新现有资源的部分信息,PUT用于将新资源的旧信息替换为新资源。现在,如何在AngularJS中实现这个概念?

一种可能的方式可能是: -

  

在控制器上,计算用户通过表单更改的字段数,并设置一个阈值,如50%,即如果用户更新了超过50%的表单字段,则调用$http.put或以其他方式致电$http.patch

有没有标准的方法来应用这个概念,或者上面提到的方法也是正确的方向?

2 个答案:

答案 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进行部分更新,这对他们及其客户也有效。

详情阅读PATCHPOSTPUT

答案 1 :(得分:0)

PUT用于创建,POST用于更新,请参阅PUT vs POST in REST

例如,您可以使用PATCH进行非常具体的更新,如果有关资源的某些信息被缓存而另一个信息没有被缓存,则可以单独使用PATCH和PUT作为明确的方法来区分哪一个将导致缓存刷新。< / p>

另一种思考方式是更新与其他资源有关系的复杂资源。

PATCH可用于添加与现有关系的关系,而POST将覆盖整个列表。

老实说我通常使用PUT来创建,但我不允许用PUT覆盖现有的entites,只有POST才能更新。

我基本上只关注部分HTTP,因为:

  • 即使它只是部分的,有人看到PUT / POST / GET的使用会期望它做相应的操作。它使我的代码更具可读性。
  • 完全实施它可能需要相当长的时间才能使我正在做的事情没有任何好处。
  • 通常在我所做的UI中,创建和修改是具有不同权限的2个分离屏幕的一部分,具有两个分离方法+ URL使得可以仅通过配置而不是通过代码分别对它们中的每一个应用权限限制。请注意,如果您使用POST xxx创建和POST xxx / [id]进行更新,则您有两个不同的URL。