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

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

Если бы я обращался только к одной команде, это было бы нормально — я бы создал службу, которая сделала вызов, а затем сослался на функцию службы в моем контроллере. Однако я хочу сделать это в нескольких командах, не создавая для каждой отдельный модуль службы.

Сервис

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», и будет извлекать данные только из этой одной команды. Я хочу создать функцию, которая позволяет заменять этот четырехзначный код в зависимости от команды, но я не знаю, как и где его разместить.

Любая помощь будет принята с благодарностью. Заранее спасибо.


person Paulos3000    schedule 30.04.2016    source источник


Ответы (1)


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

https://github.com/cullimorer/AngularGenericAPIService

Сервис содержит ряд различных методов:

ПОЛУЧИТЬ (массив) — GetListData

ПОЛУЧИТЬ — получить данные

ПОСТАВИТЬ — Обновить данные

ПОСТ – добавить данные

УДАЛИТЬ - УдалитьДанные

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

Давайте посмотрим, как мы это делаем на практике. Если вы хотите вызвать конечную точку restful 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 или писать длинные конкатенации строк.

person cullimorer    schedule 15.08.2016
comment
Вы также могли бы добавить ссылку для ответа в качестве комментария. - person Pankaj Parkar; 15.08.2016
comment
Вы знаете ngResource? Звучит лучше в ситуации, о которой спрашивал ОП. - person Pankaj Parkar; 16.08.2016
comment
Я не сталкивался с этим раньше, но похоже, что он достигает того же результата. Обязательно постараюсь интегрировать его в будущие проекты, чтобы попробовать! Спасибо. - person cullimorer; 16.08.2016
comment
Я ценю ваши усилия, что вы сделали это +1, я просто предлагаю вам добавить еще немного конфигурации, например, иметь свои собственные transformRequest и transformResponse. +1 за все ваши усилия и звездочка вашему репозиторию - person Pankaj Parkar; 16.08.2016
comment
Да, это отличная идея. Если вы хотите предложить некоторые изменения, мы могли бы поработать над этим вместе? - person cullimorer; 16.08.2016