是否应在角度服务中定义所有RESTful API调用?

时间:2016-07-27 01:55:01

标签: javascript angularjs restful-architecture ngresource

我想打电话给以下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()是一个为/ api / user / inbox发出http请求的函数

1 个答案:

答案 0 :(得分:5)

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

  • 单个位置的网址,因此在更改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 - 如果您使用的是真正的RESTfull API,建议您考虑使用Restangular