Javascript 何时使用补丁并放入AngularJS

Javascript 何时使用补丁并放入AngularJS,javascript,angularjs,rest,api,Javascript,Angularjs,Rest,Api,PATCH用于更新现有资源的部分信息,PUT用于将该资源的旧信息替换为新信息。现在,这个概念应该如何在AngularJS中实现 一种可能的方法是: 在控制器上,计算用户通过表单更改的字段数,并将阈值设置为50%,即如果用户更新的表单字段超过50%,则调用$http.put,或者调用$http.patch 是否有任何标准方法来应用此概念,或者上述方法也是正确的方向?PUT用于创建、发布到更新,请参见 您可以使用补丁进行非常特定的更新,例如,如果某个资源的某些信息已缓存,而另一个未缓存,则可以使用补

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

一种可能的方法是:

在控制器上,计算用户通过表单更改的字段数,并将阈值设置为50%,即如果用户更新的表单字段超过50%,则调用
$http.put
,或者调用
$http.patch


是否有任何标准方法来应用此概念,或者上述方法也是正确的方向?

PUT用于创建、发布到更新,请参见

您可以使用补丁进行非常特定的更新,例如,如果某个资源的某些信息已缓存,而另一个未缓存,则可以使用补丁并单独放置,以明确区分哪一个将导致缓存刷新

另一种想法是更新与其他资源有关系的复杂资源

补丁可以用来将关系添加到现有的关系中,而POST将覆盖整个列表

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

我基本上只是部分遵循HTTP,因为:

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

这实际上取决于API如何建立应在其每个资源上使用的请求类型

在理想世界中,您会:

  • 使用
    POST
    在资源集合上创建资源。e、 g.
    POST/v1/cars
    的两个请求将导致创建
    /v1/cars/1
    /v1/cars/2
  • 使用
    PUT
    更新资源属性,最理想的情况是当所有属性都在更改时,即使它们保持相同的值。请求主体(有效负载)应该包括所有属性。PUT是幂等的,这意味着如果使用相同的请求主体(有效载荷)发出两个请求
    PUT/v1/cars/1
    ,它将生成标识符为1的汽车,并用属性进行更新。N相同数量的请求以相同的更新/修改实体表示形式结束
  • 使用
    PATCH
    对资源执行部分修改。所以,如果你只是更新了1号车的品牌和型号,而不是价格,那么补丁在这里是理想的,只要API支持它
最终,在现实中,为了回答您的问题,无论是谁创建了您正在使用的API(您的后端),都将决定应该使用哪些动词来表示什么。所以在现实中,你会在许多API中看到所有错误,比如用于升级和更新的POST,用于创建的POST,用于执行GET的POST,这实际上取决于它们

如果你能控制angular.js应用程序所依赖的后端,请尽量遵守这些准则。但这些只是指导方针,不需要强制执行,很多时候,您的业务需要需要您从这些指导方针中转移注意力。所以对部分实体更新使用补丁,对完整实体更新使用PUT,或者对所有内容使用补丁(部分/完整)。你会找到适合你的。忘掉你在问题中写的百分比规则,那会使事情复杂化

我个人使用补丁作为更新,无论是部分更新还是完全更新。所以我不需要支持API中更新资源的两种方式,所以我不支持PUTs。但是我的一些同事把他们的团队作为补丁使用。所以他们不支持补丁。他们使用PUT进行部分更新,这对他们和他们的客户都有效


阅读更多信息,

当您只发送一组更改时,我一直认为修补程序是合适的;当您发送完整的实体时,发布补丁程序。例如,在过去的一个项目中,我们使用补丁进行所有更新,因为我们有一个安全模型,这意味着在大多数情况下,我们不会向客户端发送所有字段。从技术上讲,它一直是一个三角洲,这就是关键所在,我试图找出一些合适的例子。考虑到除了insert only字段外,我总是发送整个对象,所以我自己也不需要补丁。PUT和POST的区别在于PUT是幂等的。具有相同负载的多个PUT请求会导致相同的更新实体,而不是POST,其中多个POST请求会导致多个副作用,如创建多个条目。我不认为这篇文章适合更新。修补程序/放置程序是用于该作业的程序。综上所述,如果你要遵循每个动词/请求的用途,那么实际上,你可以让这些请求做任何事情:比如POST做更新。POST是创建和放置,补丁是更新。PUT是幂等的,POST不是。PUT不能用于创建资源。补丁用于对资源进行部分更新。PUT始终替换整个资源。请不要把这些混为一谈。@SahilBabbar您的问题中没有提到可伸缩性,我也没有看到任何需要区分PUT和PATCH以实现可伸缩性的东西,除了一些即使是这样也可能不需要的微优化。好吧,但是您如何看待计算的想法,无论是部分更改还是完全更改,在前端?如果支持修补程序,则不支持