У меня есть несколько веб-сервисов, на которые я хочу позвонить. $resource
или $http
какой из них мне следует использовать?
$resource
: https://docs.angularjs.org/api/ngResource/service/$resource
$http
: https://docs.angularjs.org/api/ng/service/$http
После того, как я прочитал две вышеупомянутые страницы API, я потерян.
Не могли бы вы объяснить мне на простом английском языке, в чем разница и в какой ситуации я должен их использовать? Как мне структурировать эти вызовы и правильно читать результаты в объекты js?
Ответы:
$http
для общего назначения AJAX. В большинстве случаев это то, что вы будете использовать. С$http
вы собираетесь делатьGET
,POST
,DELETE
тип вызовов вручную и обработки объектов , они возвращаются на свои собственные.$resource
обертки$http
для использования в сценариях RESTful web API.Если говорить в самом общем виде : веб - сервис успокоительной будет обслуживание с одной конечной точки для типа данных , который делает разные вещи с этим типом данных на основе HTTP методы , такие как
GET
,POST
,PUT
,DELETE
и т.д. Таким образом , с$resource
, вы можете назвать ,GET
чтобы получить ресурс как объект JavaScript, затем измените его и отправьте обратно с помощьюPOST
или даже удалите его с помощьюDELETE
.... если это имеет смысл.
источник
$resource
сервиса будет только идиоматическими / хорошо , если ваша REST конечной точка опорыGET
,POST
, иDELETE
? Документы ( docs.angularjs.org/api/ngResource.$resource ) показывают, что вы получаете эти 3 метода REST$resource
.PUT
или что-нибудь еще, что вы хотитеGET
,POST
иDELETE
просто по умолчанию. Если у вас есть конечная точка, которая имеет дело с одним и тем же ресурсом (что важно) для более чем одного метода HTTP, то$resource
это хороший выбор..$promise
работает хорошоresolve
для маршрутизации и связывания.Я чувствую, что другие ответы, хотя и правильные, не совсем объясняют суть вопроса:
REST
это подмножествоHTTP
. Это означает, что все, что может быть сделано через,REST
может быть сделано через,HTTP
но не все, что может быть сделано через,HTTP
может быть сделано черезREST
. Поэтому$resource
использует$http
внутренне.Итак, когда использовать друг друга?
Если все, что вам нужно, это то
REST
, что вы пытаетесь получить доступ кRESTful
веб-сервису,$resource
это очень упрощает взаимодействие с этим веб-сервисом.Если вместо этого вы пытаетесь получить доступ ко всему, что не является
RESTful
веб-сервисом, вам придется с этим согласиться$http
. Имейте в виду, вы также можете получить доступ кRESTful
веб-сервису через$http
, это будет гораздо более громоздким, чем с$resource
. Именно так большинство людей делают это вне AngularJS, используяjQuery.ajax
(эквивалент Angular's$http
).источник
$http
делает общего назначения AJAX вызова, в котором вообще означает , что он может включать в себя RESTful API плюс Non-успокоительный API.и
$resource
специализируется на этой части RESTful .Restful Api стал распространенным в последние годы, потому что URL лучше организован, а не случайный URL, составленный программистами.
Если бы я использовал RESTful API для создания URL, это было бы что-то вроде
/api/cars/:carId
.$resource
способ получения данныхЭто даст вам объект ресурса , который сопровождается с
get
,save
,query
,remove
,delete
методами автоматически.$http
способ получения данныхПосмотрите, как нам нужно определить каждую общую операцию в RESTFul API . Также одним отличием является то, что
$http
возвращаетpromise
время$resource
возвращает объект. Существуют также сторонние плагины, помогающие Angular справляться с RESTFul API, такие как restangularЕсли API это что-то вроде
/api/getcarsinfo
. Все что нам осталось это использовать$http
.источник
/api/getcarsinfo
я думаю, мы все еще можем использовать$resource
Я думаю, что ответ больше зависит от того, кем вы являетесь в то время, когда пишете код. Используйте,
$http
если вы новичок в Angular, пока не знаете, зачем вам это нужно$resource
. Пока у вас не будет конкретного опыта того, как$http
вас сдерживать, и вы не поймете смысл использования$resource
в вашем коде , придерживайтесь$http
.Это был мой опыт: я начал свой первый Angular-проект, мне нужно было отправлять HTTP-запросы в интерфейс RESTful, поэтому я провел то же исследование, что и вы сейчас. Основываясь на обсуждении, которое я прочитал в таких вопросах, как этот, я решил пойти с ним
$resource
. Это была ошибка, которую я хотел бы отменить. Вот почему:$http
примеров много, они полезны и, как правило, именно то, что вам нужно. Ярких$resource
примеров мало, и (по моему опыту) редко все, что вам нужно. Для новичка Angular вы не поймете последствия вашего выбора до тех пор, пока вы не озадачены документацией и не злитесь на то, что не можете найти полезных$resource
примеров, которые могли бы вам помочь.$http
это, вероятно, ментальная карта 1 к 1 с тем, что вы ищете. Вам не нужно изучать новую концепцию, чтобы понять, что вы получаете$http
.$resource
приносит много нюансов, для которых у вас еще нет ментальной карты.$http
возвращает обещание и.then
может, так что оно вписывается в новые вещи, которые вы узнаете об Angular и обещаниях.$resource
, который не возвращает обещание напрямую, усложняет ваше предварительное понимание угловых основ.$resource
является мощным, потому что он конденсирует код для вызовов RESTful CRUD и преобразования для ввода и вывода. Это здорово, если вам надоело многократно писать код для обработки результатов$http
себя. Для всех, кто$resource
добавляет загадочный слой синтаксиса и передачи параметров, что сбивает с толку.Хотелось бы, чтобы я знал меня 3 месяца назад, и я бы решительно сказал себе: «Держись с
$http
ребенком. Это просто прекрасно».источник
/user/:userId
или/thing
. Как только вы перейдете к этому,/users/roles/:roleId
вам придется изменять $ resource url и params для каждого глагола, и вы также можете использовать $ http на этом этапе.$resource
и переключиться на$http
места. Я не могу особо подчеркнуть, как сильно я желаю, желаю, чтобы я никогда не встречался$resource
. Я вероятно потратил впустую больше недели, гоняясь за нюансами$resource
за месяцы.$http
Это так просто и понятно, что любой выигрыш, который нужно получить,$resource
был полностью уничтожен кривой обучения.Я думаю, что важно подчеркнуть, что $ resource ожидает объект или массив как ответ от сервера, а не необработанную строку. Поэтому, если в качестве ответа у вас есть необработанная строка (или что-либо кроме объекта и массива), вы должны использовать $ http
источник
Когда дело доходит до выбора между
$http
или$resource
технически говоря, нет правильного или неправильного ответа, по сути, оба будут делать то же самое.Цель
$resource
состоит в том, чтобы позволить вам передать строку шаблона (строку, содержащую заполнители) вместе со значениями параметров.$resource
заменит заполнители из строки шаблона значениями параметров, передаваемыми в качестве объекта. Это в основном полезно при взаимодействии с источником данных RESTFul, так как они используют аналогичные принципы для определения URL.Что
$http
делает для выполнения асинхронных HTTP-запросов.источник
$resource
не может работать асинхронно? Просто хотел уточнить$http
самый простой способ выполнить асинхронные HTTP-запросы и что, по$resource
сути, делает то же самое, но с другими параметрамиСервис ресурсов - это просто полезный сервис для работы с REST APSI. когда вы используете его, вы не пишете свои методы CRUD (создавать, читать, обновлять и удалять)
Насколько я понимаю, ресурсная служба - это просто ярлык, с http-сервисом можно делать все что угодно.
источник
$http.get('/path/to/thing', params)
противmyResource.get(params)
плюса на самом деле делают настройку дляmyResource
. Больше кода заранее и только действительно работает плавно с тем же существительным API. В противном случае вы кодируете столько же, сколько используете $ http.Одна вещь, которую я заметил при использовании $ resource over $ http, - это если вы используете Web API в .net
$ resource связан с одним контроллером, который выполняет одну цель.
$ resource ('/ user /: userId', {userId: '@ id'});
Хотя $ http может быть чем угодно. просто укажите URL.
$ http.get - "api / authenticate"
это только мое мнение.
источник
Служба $ resource в настоящее время не поддерживает обещания и поэтому имеет совершенно другой интерфейс со службой $ http.
источник
var myResource = $resource(...config...);
где-то еще в службе, которую вы делаете,return myResource.get(..params...)
или вы можете сделатьvar save = myResource.save(); save.$promise.then(...fn...); return save;