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?
9 ответов:
$httpдля общего назначения AJAX. В большинстве случаев это то, что вы будете использовать. С$httpвы будете делатьGET,POST,DELETEвведите вызовы вручную и обработку объектов, которые они возвращают самостоятельно.
$resourceобертывания$httpдля использования в сценариях RESTful web API.
говоря очень обобщенно: веб-служба RESTful будет службой с одной конечной точкой для типа данных, который делает разные вещи с этим типом данных на основе на HTTP методы, такие как
GET,POST,PUT,DELETEи т. д. Так что с$resource, вы можете вызвать aGETчтобы получить ресурс в виде объекта JavaScript, затем измените его и отправьте обратно с помощьюPOST, или даже удалить его сDELETE.... если это имеет смысл.
я чувствую, что другие ответы, хотя и правильные, не совсем объясняют корень вопроса:
REST- это подмножествоHTTP. Это означает все, что можно сделать с помощьюRESTможно сделать черезHTTPно не все, что можно сделать с помощьюHTTPможно сделать черезREST. Вот почему$resourceиспользует$httpвнутренне.Итак, когда использовать друг друга?
если все, что вам нужно-это
REST, то есть, вы пытаетесь получить доступ кRESTfulwebservice,$resourceбудет очень легко взаимодействовать с этим веб-сервисом.если вместо этого вы пытаетесь получить доступ ко всему, что не является
RESTfulwebservice, вам придется пойти с$http. Имейте в виду, вы также можете получить доступ кRESTfulwebservice через$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сдерживает вас, и вы понимаете последствия использования$resourcein код, палку с$http.это был мой опыт: я начал свой первый угловой проект, мне нужно было сделать HTTP-запросы к спокойному интерфейсу, поэтому я сделал то же самое исследование, что и вы сейчас. Основываясь на обсуждении, которое я прочитал в таких вопросах, как этот, я решил пойти с
$resource. это была ошибка, которую я хотел бы исправить. вот почему:
$httpпримеры многочисленны, полезны и, как правило, именно то, что вам нужно. Чисто$resourceпримеры скудны, и (по моему опыту) редко все, что вам нужно. Для углового новичка вы не поймете последствий своего выбора до тех пор, пока вы не застряли в недоумении над документацией и сердитесь, что вы не можете найти полезную$resourceпримеры, чтобы помочь вам.$httpЭто, вероятно, 1-к-1 ментальная карта к тому, что вы ищете. Вам не нужно изучать новую концепцию, чтобы понять, что вы получаете с$http.$resourceприносит с собой много нюансов, которые у вас еще нет ментальной карты.- Ой, я же сказал, что тебе не нужно изучать новую концепцию? Как угловатый новичок вы do должны узнать об обещаниях.
$httpвозвращает обещание и.thenспособный, поэтому он вписывается в новые вещи, которые вы узнаете об угловом и обещаниях.$resource, который не возвращает обещание напрямую, усложняет ваше предварительное понимание угловых основ.$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