-1

我有一个REST API,它有这样的事情:将AngularJS与非RESTful API集成的最佳方法是什么?

GET /区 - 列出所有区域

{ 
    "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 /:编号

删除区

PUT /区/:ID

更新区域

,现在,终于我有这样的:

GET /区/ 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

这是最好的方法是什么?

+0

FYI:http://vvv.tobiassjosten.net/development/your-api-is-not-restful/ :) – sp00m

回答

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 
      }; 
     }; 
    }]); 
相关问题