是否应该在角度服务中定义所有 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 服务,而不是搞乱 $httpBackendapp.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 调用?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 angularJS restful 服务使用来自外部文件的 json 数据