jory jory - 1 year ago 46
Javascript Question

Should ALL RESTful API calls be defined in an angular service?

I would like to call the following api routes


Would all of these be defined in one angular service? And how would I do that? every tutorial I've looked at has a service where it immediately returns the resource and it's usually for CRUD operations too. I'd most likely be calling these routes in multiple controllers so I think having it in one service is beneficial. Could someone show an example of how I would create a service to call these routes?

I'd like to do operations like this in other controllers

$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

where $api is the service I would define and getuserInbox() is a function which makes an http request for /api/user/inbox

Answer Source

Yes, putting all RESTfull API calls into a service is ideal. Benefits include:

  • URLs in single place so when changing API (or using different version), you change it in single place.
  • Can easily refactor to use alternate to $http eg: restangular.
  • Easily add generic error handling for requests, since all requests in single place.
  • Makes testing easier. Just 'mock' your API service instead of messing with $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 =;

PS - If you are consuming a true RESTfull API, I suggest you consider Restangular.