AngularJS$resource对象不';是否提供幂等更新方法?

AngularJS$resource对象不';是否提供幂等更新方法?,angularjs,angular-resource,Angularjs,Angular Resource,我真的在尽可能多地考虑这件事,但我很难做到这一点。也许我错过了显而易见的事情 给定一个典型的RESTAPI(具有幂等更新方法和创建方法): 如果使用以下URL创建标准资源: Client = $resource("http://www.domain.com/api/clients/:id") 然后我自动获取(其中Client是$resource,Client是返回的实体): 我遇到的问题是默认情况下没有要保存的PUT方法(通常用于标识幂等更新) 我是否误解了什么,或者这是Angular API

我真的在尽可能多地考虑这件事,但我很难做到这一点。也许我错过了显而易见的事情

给定一个典型的RESTAPI(具有幂等更新方法和创建方法):

如果使用以下URL创建标准资源:

Client = $resource("http://www.domain.com/api/clients/:id")
然后我自动获取(其中Client是$resource,Client是返回的实体):

我遇到的问题是默认情况下没有要保存的
PUT
方法(通常用于标识幂等更新)

我是否误解了什么,或者这是Angular API中的一个缺陷?我希望
$save()
使用
PUT
而不是
POST
。按照当前的结构,我必须创建自己的
$update()
方法定义,然后依靠开发人员不要意外地使用
$save()
方法


我的API结构是否有误?REST API是否应采用不同的结构?

您只需在资源中指定方法,如:

app.factory('someFactory', ['$resource', function($resource) {
  return $resource('/api/:id', {
    id: '@id'
  }, {
  update: {
    method: 'PUT'
  },
  get: {
    method: 'GET'
  }
 });
}]);

但我完全同意$save是create而不是update的一个奇怪动词。看起来他通过扩展对象并检查id实现了双重保存功能。

是的,我完全知道这一点。然而,这意味着我需要为遵循此模式的每个资源执行此操作。这还意味着我有一个无效的
$save()
方法(但我无法消除)。所以我忍不住想知道AngularJS是否/为什么默认情况下还没有这样做。由于AngularJS应该与最佳实践一起工作,等等,这让我进一步怀疑我的REST设计是否应该重新检查以使其更灵活/兼容/etc。谢谢-我也在想同样的事情,但非常惊讶的是,默认情况下它还不是Angular的一部分。你能编辑你的答案并添加你的评论给将来看这个的人吗?
Client.get()
Client.query()
Client.save()
client.$save()
client.$remove/delete()
app.factory('someFactory', ['$resource', function($resource) {
  return $resource('/api/:id', {
    id: '@id'
  }, {
  update: {
    method: 'PUT'
  },
  get: {
    method: 'GET'
  }
 });
}]);