我有一个REST API,它有这样的东西:
获取/区域 - 列出所有区域
{
"zones": [
{
"name": "zone 1",
"persons": [
0,
2,
3
],
"counter" : 3
},
{
"name": "zone 2",
"persons": [
1,
5
],
"counter" : 0
}
]
}
POST /区域 - 创建新区域
{
"name": "zone 1",
"persons": [
0,
2,
3
]
}
DELETE / zones /:id
删除区域
PUT / zones /:id
更新区域
现在,最后我有了这个:
GET / zones / increment_counter /:id
增加区域的计数器参数。
我正在使用Angular,我正在为Zone对象定义一个工厂,它应该从这个REST API中提供自己。
我见过this example并且它几乎满足了我想要的,除了增量操作,它不遵循RESTful准则。
我无法修改REST API,所以我必须处理这个问题。我该如何处理这些类型的端点?
另外,我应该使用服务还是只能在我的Zone工厂中定义一个方法(例如:zone.incrementCounter()),它直接查询服务器并递增计数器?
我习惯于Java对象,我只需要为类and the class will access the server's endpoints under the hood定义 getters 和 setters 。
最好的办法是什么?
答案 0 :(得分:1)
你试过ngResource吗?因为那是你应该开始的地方。
这是一个未经测试的代码段,为您提供它的要点。
<强>工厂强>
angular.module('MyApplication')
.factory('ZoneFactory', ['$resource', function($resource) {
var url = 'www.example.com/api/zones';
var paramDefaults = {};
var methods = {
'get': {
'url': url,
'method': 'GET'
},
'post': {
'url': url,
'method': 'POST'
},
'delete': {
'url': url,
'method': 'DELETE',
'params': {
'id': '@id'
}
},
'put': {
'url': url,
'method': 'PUT',
'params': {
'id': '@id'
}
},
'increment': {
'url': url + '/increment_counter',
'method': 'GET',
'params': {
'id': '@id'
}
}
};
return $resource(url, paramDefaults, methods);
}]);
<强>控制器强>
angular.module('MyApplication')
.controller('SomeController', ['ZoneFactory', function(ZoneFactory) {
var mv = this;
mv.newZone = {
'name': '',
'persons': [],
'counter': 0
};
mv.zones = ZoneFactory.get();
mv.createZone = function() {
ZoneFactory.post({'zone': mv.newZone});
mv.zones.push(mv.newZone);
mv.newZone = {
'name': '',
'persons': [],
'counter': 0
};
};
}]);