AngularJS $资源对象没有提供幂等更新方法?

时间:2014-10-22 20:32:29

标签: angularjs angular-resource

我真的想尽可能地绕过这个,但是这样做非常困难。也许我错过了显而易见的事情。

给定典型的REST API(具有幂等更新方法和创建方法):

http://www.domain.com/api/clients           GET     // returns all clients
http://www.domain.com/api/clients           POST    // create a new  client
http://www.domain.com/api/clients/:id       GET     // returns single client
http://www.domain.com/api/clients/:id       PUT     // updates a single client - idempotent
http://www.domain.com/api/clients/:id       DELETE  // delete single client

如果我使用以下网址创建标准资源:

Client = $resource("http://www.domain.com/api/clients/:id")

然后我自动获取(客户端是$资源,客户端是返回的实体):

Client.get()
Client.query()
Client.save()
client.$save()
client.$remove/delete()

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

我是否误解了某些内容,或者这是Angular API的缺陷?我希望$save()使用PUT而不是POST。它当前的结构方式,我必须创建自己的$update()方法定义,然后依赖开发人员不要意外使用$save()方法。

我是否错误地构建了我的API? REST API的结构应该不同吗?

1 个答案:

答案 0 :(得分:2)

您可以在资源中指定方法,如:

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

但我完全同意$ save是一个奇怪的动词,而不是更新。 This guy也是如此,看起来他通过简单地扩展对象并检查id来实现双重目的。