2016-07-27 30 views
5

我想調用下面的API路線是否應該在角度服務中定義所有RESTful 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()是一個函數,它發出一個HTTP請求/ API /用戶的服務/收件箱

回答

4

是的,將所有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 - 如果你是消費真正問題的REST API,我建議你考慮Restangular

相關問題