Ссылка на несколько вызовов API в одной службе (Angular)

Я получаю доступ к API через Angular $http-запросы для сбора информации для разных футбольных команд.

Если бы я был только для доступа к одной команде, это было бы хорошо - я бы создал Службу, которая сделала вызов, а затем ссылалась на функцию Service в моем контроллере. Однако я хочу сделать это в многочисленных командах, не создавая отдельный сервисный модуль для каждого из них.

Сервис

app.factory('APIService', ['$http',
   function($http) {
      return $http.get('http://API/team/1204?Authorization=xxxxx')
      .success(function(data) {
        return data;
      })
        .error(function(err) {
        return err;
      });
   }
]);

Внутри моего контроллера...

APIService.success(function(data) {
    $scope.apiData = data; 
});

Как вы можете видеть в Сервисе, команда специфична, "1204", и будет только извлекать данные из этой команды. Я хочу создать функцию, которая позволяет использовать четырехзначный код в зависимости от команды, но я не знаю, как это сделать или где ее можно разместить.

Любая помощь будет широко оценена. Спасибо заранее.

Ответ 1

Я создал услугу Generic Angular, которая является единственной услугой, которая вам понадобится в вашем приложении.

https://github.com/cullimorer/AngularGenericAPIService

Служба содержит несколько различных методов:

GET (массив) - GetListData​​p >

GET - GetData​​p >

PUT - UpdateData​​p >

POST - AddData​​p >

УДАЛИТЬ - DeleteData​​p >

Итак, что особенного в этом? Ну, что происходит, вы можете вызывать любую конечную точку, передавая столько параметров, сколько хотите. Это очень похоже на функцию "string.Format" в С#, где она принимает значение указанных объектов и вставляет их в другую строку. CommonService содержит метод, называемый "stringFormat", который реплицирует эту функциональность для использования службой общего API.

Посмотрим, как мы это делаем на практике. Если вы хотите вызвать остальную конечную точку API, называемую "fooBars", передав "ID" из 1, чтобы вернуть один "fooBar", мы сделали бы это так:

return genericService.getData('fooBars/{0}', [1]);

Это вызовет API с URL-адресом:

" http://localhost/API/fooBars/1"

Второй параметр - это массив, таким образом вы можете передать столько параметров, сколько хотите, в строку, скажем, у нас есть несколько "foos" и "bars", которые мы могли бы сделать примерно так:

return genericService.getData('foos/{0}/bars/{1}', [1, 2]);

Это вызовет API с URL-адресом:

" http://localhost/API/foos/1/bars/2"

И так далее. Это довольно простой сервис, но я использую его во всех проектах AngularJS, потому что он настолько прост в реализации и означает, что вам не нужно писать тонну различных запросов в ваших службах Angular или писать длинные конкатенации строк.