2016-07-27 29 views
5

我想调用下面的API路线是否应该在角度服务中定义所有RESTful API调用?

/api/user/:id 
/api/user/inbox 
/api/user/blah 

会所有这些在一个角服务来定义?我该怎么做?我看过的每个教程都有一个服务,它立即返回资源,通常也用于CRUD操作。我很可能会在多个控制器中调用这些路由,所以我认为在一个服务中使用它是有益的。有人可以展示我将如何创建一个服务来调用这些路线吗?

我想要做这样的操作在其它控制器

$scope.inbox = $api.getUserInbox() //function which requests api/user/inbox 

$scope.user = $api.getUser() //function which requests api/user/:id 

$scope.blah = $api.getUserBlah() //function which requests api/user/blah 

其中$ API是我将定义和getuserInbox()是一个函数,它发出一个HTTP请求/ API /用户的服务/收件箱

回答

4

是的,将所有RESTfull API调用放入服务中是理想的选择。好处包括:

  • 单个地方的URL,所以当更改API(或使用不同的版本)时,您在一个地方更改它。
  • 可以轻松重构使用替代到$ http例如:restangular。
  • 轻松地为请求添加通用错误处理,因为所有请求都在一个地方。
  • 使测试更容易。只是 '模仿' 的API服务而不是用$ httpBackend搞乱


app.service('userAPI', function($http) { 
    var self = this; 
    var baseUrl = "api/user/"; 

    self.getUser(id) { 
     return $http.get(baseUrl + id); 
    } 
}); 

app.controller('myController', function($scope, userAPI) { 
    userAPI.getUser(1).then(function(response) { 
     $scope.user = response.data; 
    }; 
} 

PS - 如果你是消费真正问题的REST API,我建议你考虑Restangular

相关问题