AngularJS $http и $resource



у меня есть некоторые веб-сервисы, которые я хочу назвать. $resource или $http, какой из них я должен использовать?



$resource: https://docs.angularjs.org/api/ngResource/service / $resource



$http: https://docs.angularjs.org/api/ng/service / $http



после того, как я прочитал две вышеуказанные страницы API, я потерялся.



не могли бы вы объяснить мне на простом английском языке, в чем разница и в какой ситуации я должен их использовать? Как правильно ли я структурирую эти вызовы и считываю результаты в объекты js?

584   9  

9 ответов:

$http для общего назначения AJAX. В большинстве случаев это то, что вы будете использовать. С $http вы будете делать GET,POST,DELETE введите вызовы вручную и обработку объектов, которые они возвращают самостоятельно.

$resource обертывания $http для использования в сценариях RESTful web API.


говоря очень обобщенно: веб-служба RESTful будет службой с одной конечной точкой для типа данных, который делает разные вещи с этим типом данных на основе на HTTP методы, такие как GET,POST,PUT,DELETE и т. д. Так что с $resource, вы можете вызвать a GET чтобы получить ресурс в виде объекта JavaScript, затем измените его и отправьте обратно с помощью POST, или даже удалить его с DELETE.

... если это имеет смысл.

я чувствую, что другие ответы, хотя и правильные, не совсем объясняют корень вопроса:REST - это подмножество HTTP. Это означает все, что можно сделать с помощью REST можно сделать через HTTP но не все, что можно сделать с помощью HTTP можно сделать через REST. Вот почему $resource использует $http внутренне.

Итак, когда использовать друг друга?

если все, что вам нужно-это REST, то есть, вы пытаетесь получить доступ к RESTful webservice,$resource будет очень легко взаимодействовать с этим веб-сервисом.

если вместо этого вы пытаетесь получить доступ ко всему, что не является RESTful webservice, вам придется пойти с $http. Имейте в виду, вы также можете получить доступ к RESTful webservice через $http, просто это будет гораздо более громоздким, чем с $resource. Именно так большинство людей делали это за пределами AngularJS, используя jQuery.ajax (эквивалент углового $http).

$http делает вызов AJAX общего назначения, в котором общие означает, что он может включать в себя спокойный api plus Без Отдыха api.

и $resource специализируется на этом спокойный часть.

Restful Api пришел к распространенному в последние годы, потому что url лучше организован вместо случайного url, составленного программистами.

если я использую RESTful API to построить url, это было бы что-то вроде /api/cars/:carId.

$resource способ извлечения данных

angular.module('myApp', ['ngResource'])

    // Service
    .factory('FooService', ['$resource', function($resource) {
        return $resource('/api/cars/:carId')
    }]);

    // Controller
    .controller('MainController', ['FooService', function(FooService){
        var self = this;
        self.cars = FooService.query();
        self.myCar = FooService.get('123');

    }]);

это даст вам ресурс, которая сопровождается get,save,query,remove,delete автоматически методами.

$http способ извлечения данных

angular.module('myApp', [])

    // Service
    .factory('FooService', ['$http', function($http){
        return {
            query: function(){
                return $http.get('/api/cars');
            },

            get: function(){
                return $http.get('/api/cars/123');
            }
            // etc...
        }

смотрите, как нам нужно определить каждую общую операцию на RESTFul API. Еще одно отличие заключается в том, что $http возвращает promise пока $resource возвращает объект. Есть также сторонние плагины, которые помогут Angular справиться с RESTFul API как restangular


если API-это что-то вроде /api/getcarsinfo. Все, что осталось для нас, это использовать $http.

Я думаю, что ответ больше зависит от того, кто вы находятся в то время, когда вы пишете код. использовать $http Если вы новичок в Angular, пока вы не знаете, зачем вам нужно $resource. пока у вас нет конкретного опыта, как $http сдерживает вас, и вы понимаете последствия использования $resource in код, палку с $http.

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

  1. $http примеры многочисленны, полезны и, как правило, именно то, что вам нужно. Чисто $resource примеры скудны, и (по моему опыту) редко все, что вам нужно. Для углового новичка вы не поймете последствий своего выбора до тех пор, пока вы не застряли в недоумении над документацией и сердитесь, что вы не можете найти полезную $resource примеры, чтобы помочь вам.
  2. $http Это, вероятно, 1-к-1 ментальная карта к тому, что вы ищете. Вам не нужно изучать новую концепцию, чтобы понять, что вы получаете с $http. $resource приносит с собой много нюансов, которые у вас еще нет ментальной карты.
  3. Ой, я же сказал, что тебе не нужно изучать новую концепцию? Как угловатый новичок вы do должны узнать об обещаниях. $http возвращает обещание и .thenспособный, поэтому он вписывается в новые вещи, которые вы узнаете об угловом и обещаниях. $resource, который не возвращает обещание напрямую, усложняет ваше предварительное понимание угловых основ.
  4. $resource является мощным, потому что он конденсирует код для RESTful CRUD вызовов и преобразований для ввода и вывода. Это здорово, если вы устали от многократного написания кода для обработки результаты $http себя. Для всех остальных,$resource добавляет загадочный уровень синтаксиса и передачи параметров, что сбивает с толку.

жаль, что я не знал меня 3 месяца назад, и я бы решительно сказал себе: "придерживайся $http ребенок. Все в порядке."

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

когда дело доходит до выбора между $http или $resource технически говоря, нет правильного или неправильного ответа, по сути оба будут делать то же самое.

цель $resource позволяет передать в шаблон строку (строку, содержащую заполнители) вместе со значениями параметров. $resource заменит заполнители из строки шаблона со значениями параметров, которые передаются как объект. Это в основном полезно при взаимодействии с RESTFul datasource, поскольку они используют аналогичные принципы для определения URL-адресов.

что $http не выполнять асинхронные запросы HTTP.

сервис ресурс-это просто полезный сервис для работы с апсидой остальные. когда вы используете его, вы не пишете свои методы CRUD (create,read,update and delete)

насколько я вижу, служба ресурсов-это просто ярлык, вы можете сделать все, что угодно с помощью службы http.

одна вещь, которую я заметил при использовании $resource над $http если вы используете веб-API в .net

$ресурс привязан к одному контроллеру, который выполняет одну цель.

$ресурс('/пользователи/:ИД пользователя', {идентификатор:'@идентификатор'});

[HttpGet]
public bool Get(int id)
{
    return "value"
}

public void Post([FromBody]string value)
{
}

public void Put(int id, [FromBody]string value)
{
}

public void Delete(int id)
{
}

в то время как $http может быть чем угодно. просто укажите URL-адрес.

$ http.get - "api / authenticate"

[HttpGet]
public bool Authenticate(string email, string password)
{
    return _authenticationService.LogIn(email, password, false);
}

это просто мое мнение.

служба $resource В настоящее время не поддерживает обещания и поэтому имеет совершенно другой интерфейс для службы $http.

Comments

    Ничего не найдено.