所有RESTful API调用都应该在角度服务中定义吗

Should ALL RESTful API calls be defined in an angular service?

本文关键字:服务 定义 API RESTful 调用 所有      更新时间:2023-09-26

我想调用以下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请求的函数

是的,将所有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-如果您正在使用真正的RESTful API,我建议您考虑Restangular。