Как именно эта конфигурация подключения к веб-службе $resource в AngularJS?

Я абсолютно новичок в AngularJS и изучаю учебник, который показывает, как получить доступ к этому внешнему API прогноза погоды: http://openweathermap.org/forecast для получения и использования информации о погоде.

Итак, в моем приложении у меня есть такой контроллер:

weatherApp.controller('forecastController', ['$scope', '$resource', '$routeParams', 'cityService', function($scope, $resource, $routeParams, cityService) {
    // It contain the city selected in the view:
    $scope.city = cityService.city;

    $scope.days = $routeParams.days || 2;

    $scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily", 
                                  { APPID: 'MY_PERSONAL_KEY',
                                   callback: "JSON_CALLBACK",
                                   cnt: 5
                                  }, 


                                  { get: { method: "JSONP" }});

    $scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });

    $scope.convertToFahrenheit = function(degK) {

        return Math.round((1.8 * (degK - 273)) + 32);

    }

    $scope.convertToDate = function(dt) { 

        return new Date(dt * 1000);

    };

}]);

И я нахожу некоторые трудности, чтобы понять, как именно называется служба и какая информация требуется.

Итак, из того, что я понимаю (но я абсолютно не уверен в этом, поэтому поправьте меня, если я сделаю неправильное утверждение), у меня есть следующая ситуация:

1) В контроллер я ввожу службу $resource, предоставляемую Angular, которая, насколько я понимаю, является объектом, который я могу использовать для удобного взаимодействия с веб-службой RESTful.

Итак, по этой строке:

$scope.city = cityService.city;

Я помещаю город (вставленный пользователем в представление) в свойство city $scope этого контроллера, и он будет пользователем в качестве одного из параметров, используемых для запрос веб-сервиса.

Затем я создаю свойство weatherAPI для объекта $scope, которое, по моему мнению, должно представлять способ доступа к этому ресурсу.

    $scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily", 
                                  { APPID: 'MY_PERSONAL_KEY',
                                   callback: "JSON_CALLBACK"
                                  }, 


                                  { get: { method: "JSONP" }});

Итак, я думаю, что weatherAPI — это объект resource, созданный службой $resource (или я что-то упустил?).

На этом я установил URL-адрес веб-службы (http://api.openweathermap.org/data/2.5/forecast/daily) и пару объектов JSON, а именно:

{ 
    APPID: 'MY_PERSONAL_KEY',
    callback: "JSON_CALLBACK"
}, 

в котором я объявляю поле APPID, которое является моим личным ключом, для использования ключа и поля обратного вызова: "JSON_CALLBACK". Что именно представляет это поле обратного вызова?

И этот второй объект:

{получить: {метод: "JSONP"}}

Хорошо, роль этих двух объектов для меня довольно неясна.

Что именно определить? Мне кажется, что что-то связано с безопасностью моего приложения, но я абсолютно в этом не уверен

Наконец, он извлекает данные из веб-службы:

$scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });

где я думаю, что я просто передаю 2 параметра (что-то вроде ?q=value&?cnt=value классического HTTP-запроса)


person AndreaNobili    schedule 18.11.2015    source источник


Ответы (1)


Поэтому я думаю, что WeatherAPI — это ресурсный объект, созданный службой $resource (или я что-то упустил?).

Нет, вы ничего не упускаете. weatherAPI это именно то, что, по вашему мнению, должно быть.

в котором я объявляю поле APPID, которое является моим личным ключом, для использования ключа и обратного вызова: поле «JSON_CALLBACK». Что именно представляет собой это поле обратного вызова?

Поле callback — это просто GET-параметр по умолчанию, который передается в API при каждом запросе. Он установлен здесь, поэтому вам не нужно передавать его каждый раз, когда запрашивается что-то из API.

Что именно определить? Мне кажется, что что-то связано с безопасностью моего приложения, но я абсолютно в этом не уверен

Третий параметр, переданный в вызов $resource, — это определение доступных методов в вашем API.

Во внешнем объекте ключ — это имя метода. Это просто имя, по которому этот метод будет доступен. value является объектом настроек для этого метода, в этом случае он указывает только тип вашего метода, то есть «JSONP».

JSONP — это особый тип запроса, это может быть только запрос «GET», браузеры не разрешают здесь «POST». JSONP должен вернуть простой вызов функции, передав ей один параметр, JSON с данными результата. Эта функция будет вызываться в вашем JavaScript.

JSONP — это просто обходной путь для межсайтовых вызовов.

person GwynBleidD    schedule 30.11.2015