所有RESTful API调用都应该在角度服务中定义吗
Should ALL RESTful API calls be defined in an angular service?
我想调用以下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
是的,将所有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。
相关文章:
- Ember服务在注入组件并在计算属性中使用后是未定义的
- 未定义服务
- Http服务工厂将未定义的返回到Angular中的控制器
- 正在Angular 2中的扩展RouterOutlet中导入自定义服务以进行身份验证
- 角度服务未定义
- 如何正确地将数据从自定义服务传递到角度控制器
- 通过C#向区块链服务发送请求时未定义XMLHttpRequest
- AngularJs:在自定义服务中使用cookie
- 服务变量分配了数据,但在访问时始终未定义
- 承诺返回未定义的服务
- 从服务返回值时$scope控制器的变量是未定义的
- 提供“角服务”;TypeError:无法读取属性'helloConsole'“未定义”;
- 使用角度模态服务(AngularJS)自定义模态
- 正在从web服务接收未定义的信息
- 如何在Angular中设置异步HTTP服务的回调,以便在不定义数组的情况下在控制器中填充数组
- Angular 1.5.4服务未定义
- 使用angularjs中的自定义服务交换ng src属性
- 用服务定义基本的AngularJS控制器
- 是我在angular中的服务定义
- 参考错误:谷歌不是使用 ng-map GeoCoder 服务定义的