【问题标题】:Should ALL RESTful API calls be defined in an angular service?是否应该在角度服务中定义所有 RESTful API 调用?
【发布时间】:2016-11-30 20:17:05
【问题描述】:

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

【问题讨论】:

    标签: javascript angularjs restful-architecture ngresource


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多