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

Posted

技术标签:

【中文标题】是否应该在角度服务中定义所有 RESTful API 调用?【英文标题】:Should ALL RESTful API calls be defined in an angular service? 【发布时间】: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 请求的函数

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于是否应该在角度服务中定义所有 RESTful API 调用?的主要内容,如果未能解决你的问题,请参考以下文章

RESTful API 中的会话 [重复]

如何使用 angularJS restful 服务使用来自外部文件的 json 数据

DELETE 请求正文的 RESTful 替代方案

我应该在 URL 中提供父资源名称还是不在 RESTful WS 中提供父资源名称?

测试自定义角度指令是不是显示/隐藏元素

是否在自定义 HTTP 标头 RESTful 中传递租户?