2016-07-27 16 views
5

chciałbym wywołać następujące trasy apiCzy wszystkie wywołania RESTful API powinny być zdefiniowane w usłudze kątowej?

/api/user/:id 
/api/user/inbox 
/api/user/blah 

Czy wszystkie z nich są zdefiniowane w jednym kątowym usługi? I jak miałbym to zrobić? każdy samouczek, na który patrzę, ma usługę, w której natychmiast zwraca zasób i zwykle jest to również działanie CRUD. Najprawdopodobniej będę wywoływał te trasy w wielu kontrolerach, więc myślę, że posiadanie tego w jednej usłudze jest korzystne. Czy ktoś mógłby pokazać przykład, jak utworzyć usługę, aby wywołać te trasy?

Chciałbym zrobić takie operacje, jak to w innych kontrolerów

$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 

gdzie $ api jest usługa ja bym zdefiniował i getuserInbox() jest funkcją, która wysyła żądanie HTTP do/API/user/skrzynka odbiorcza

Odpowiedz

4

Tak, idealne jest połączenie wszystkich wywołań RESTfull API w jedną usługę. Korzyści obejmują:

  • Adresy URL w jednym miejscu, więc zmieniając interfejs API (lub używając innej wersji), zmieniasz go w jednym miejscu.
  • Może łatwo refaktoryzować używać alternatywnie do $ http np .: restangular.
  • Łatwe dodawanie ogólnej obsługi błędów dla żądań, ponieważ wszystkie żądania w jednym miejscu.
  • Ułatwia testowanie. Tylko 'mock' usługa API zamiast bawić z $ 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 - Jeśli spożywają prawdziwe Restfull API, proponuję rozważyć Restangular.

Powiązane problemy