AngularJS $http and $resource
Mam kilka serwisów internetowych, do których chcę zadzwonić. $resource
LUB $http
, którego powinienem użyć?
$resource
: https://docs.angularjs.org/api/ngResource/service/ $ zasób
$http
: https://docs.angularjs.org/api/ng/service / $http
Po przeczytaniu dwóch powyższych stron API jestem zagubiony.
Czy mógłby mi pan wyjaśnić po angielsku, jaka jest różnica i w jakiej sytuacji powinienem ich użyć? Jak uporządkować te wywołania i odczytać wyniki na obiekty js poprawnie?
9 answers
$http
jest do ogólnego zastosowania AJAX. W większości przypadków jest to, czego będziesz używać. Z $http
będziesz robił GET
, POST
, DELETE
typuj połączenia ręcznie i samodzielnie przetwarzaj obiekty, które zwracają.
$resource
wraps $http
do użycia w scenariuszach RESTful web API.
Mówiąc bardzo ogólnie: RESTful web service będzie usługą z jednym punktem końcowym dla typu danych, który robi różne rzeczy z tym typem danych w oparciu o metody HTTP, takie jak GET
, POST
, PUT
, DELETE
, itd. Tak więc za pomocą $resource
, możesz wywołać GET
, aby uzyskać zasób jako obiekt JavaScript, a następnie zmienić go i odesłać z powrotem za pomocą POST
, lub nawet usunąć go za pomocą DELETE
.
... jeśli to ma sens.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-14 15:08:45
Uważam, że inne odpowiedzi, choć poprawne, nie wyjaśniają do końca źródła pytania: REST
jest podzbiorem HTTP
. Oznacza to, że wszystko, co można zrobić przez REST
można zrobić przez HTTP
, ale nie wszystko, co można zrobić przez HTTP
można zrobić przez REST
. Dlatego $resource
używa $http
wewnętrznie.
Więc, kiedy wykorzystać siebie nawzajem?
Jeśli wszystko czego potrzebujesz toREST
, czyli próbujesz uzyskać dostęp do RESTful
webservice, $resource
ułatwi Ci to wejdź w interakcję z tym serwisem.
Jeśli zamiast tego próbujesz uzyskać dostęp do wszystkiego, co nie jest RESTful
webservice, będziesz musiał skorzystać z $http
. Pamiętaj, że możesz również uzyskać dostęp do RESTful
webservice przez $http
, będzie to po prostu znacznie bardziej uciążliwe niż w przypadku $resource
. Jest to sposób, w jaki większość ludzi robi to poza AngularJS, używając jQuery.ajax
(odpowiednik Angular ' s $http
).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-04 09:19:14
$http
wykonuje ogólne wywołanie AJAX, w którym ogólne oznacza, że może zawierać RESTfulapi plus Non-RESTful api.
I $resource
jest wyspecjalizowana do tego odpoczynku części.
Restful Api stało się powszechne w ostatnich latach, ponieważ url jest lepiej zorganizowany zamiast losowego adresu URL tworzonego przez programistów.
Jeśli użyję RESTful API do skonstruowania adresu url, będzie to coś w rodzaju /api/cars/:carId
.
$resource
sposób pobierania danych
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');
}]);
To da ci obiekt resource , któremu towarzyszyget
, save
, query
, remove
, delete
metody automatycznie.
$http
sposób pobierania danych
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...
}
Zobacz, jak musimy zdefiniować każdą wspólną operację na RESTFul API. Jedną z różnic jest to, że $http
zwraca promise
podczas gdy $resource
zwraca obiekt. Istnieją również wtyczki innych firm, aby pomóc Angular radzić sobie z RESTFul API Jak restangular
Jeśli API jest czymś w rodzaju /api/getcarsinfo
. Pozostało nam tylko użyć $http
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-14 02:50:30
Myślę, że odpowiedź zależy bardziej od tego, kim jesteś w momencie pisania kodu. użyj $http
, jeśli jesteś nowy w Angular, dopóki nie dowiesz się, dlaczego potrzebujesz $resource
. dopóki nie będziesz miał konkretnego doświadczenia w jaki sposób $http
Cię powstrzymuje i nie zrozumiesz konsekwencji użycia $resource
w Twojego kodu , trzymaj się $http
.
To było moje doświadczenie: zacząłem mój pierwszy projekt Angular, musiałem wysyłać żądania HTTP do interfejsu RESTful, więc zrobiłem to samo badania, które teraz robisz. Bazując na dyskusji, którą przeczytałem w tak pytaniach jak ta, wybrałem $resource
. To był błąd, który chciałbym naprawić. Oto dlaczego:
-
$http
przykłady są obfite, pomocne i ogólnie to, czego potrzebujesz. Jasne$resource
przykłady są rzadkie, a (z mojego doświadczenia) rzadko wszystko, czego potrzebujesz. Dla Angular newbie, nie zdasz sobie sprawy z konsekwencji swojego wyboru dopiero później, kiedy utknąłeś zastanawiając się nad dokumentacją i zły, że nie możesz znaleźć pomocnych$resource
przykładów, które Ci pomogą. -
$http
jest prawdopodobnie mentalną mapą 1 do 1 tego, czego szukasz. Nie musisz uczyć się nowej koncepcji, aby zrozumieć, co otrzymujesz z$http
.$resource
przynosi wiele niuansów, na które nie masz jeszcze mapy mentalnej. - UPS, czy mówiłem, że nie musisz uczyć się nowej koncepcji? Jako początkujący musisz nauczyć się obietnic.
$http
zwraca obietnicę i jest.then
w stanie, więc pasuje do z nowymi rzeczami, których się uczysz i obietnicami.$resource
, który nie zwraca bezpośrednio obietnicy, komplikuje twoje wstępne zrozumienie kanciastych podstaw. -
$resource
jest potężny, ponieważ skondensowuje kod dla RESTful CRUD wywołań i transformacji dla wejścia i wyjścia. To świetnie, jeśli masz dość wielokrotnego pisania kodu, aby przetworzyć wyniki$http
siebie. Komukolwiek innemu,$resource
dodaje tajemniczą warstwę składni i przekazywania parametrów, która jest myląca.
Chciałbym poznać siebie 3 miesiące temu, i dobitnie wmawiałbym sobie: "trzymaj się $http
dzieciaku. W porządku."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-04 22:26:38
Myślę, że należy podkreślić, że $resource oczekuje obiektu lub tablicy jako odpowiedzi od serwera, a nie surowego ciągu znaków. Więc jeśli masz surowy łańcuch znaków (lub cokolwiek poza obiektem i tablicą) jako odpowiedź, musisz użyć $http
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-01 12:55:44
Jeśli chodzi o wybór pomiędzy $http
lub $resource
technicznie rzecz biorąc, nie ma dobrej lub złej odpowiedzi w istocie, obie zrobią to samo.
Celem {[1] } jest umożliwienie przekazania ciągu szablonu (łańcucha zawierającego symbole zastępcze) wraz z wartościami parametrów. $resource
zastąpi symbole zastępcze Z ciągu szablonu wartościami parametrów przekazywanymi jako obiekt. Jest to głównie przydatne podczas interakcji z RESTFul datasource, ponieważ używają podobne zasady definiowania adresów URL.
To, co robi $http
, to wykonywanie asynchronicznych żądań HTTP.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-26 12:55:40
Resource service jest po prostu przydatną usługą do pracy z REST APSIs. kiedy go używasz, nie piszesz swoich metod CRUD (Utwórz,przeczytaj,zaktualizuj i usuń)
Z tego co widzę, resource service to tylko skrót, możesz zrobić wszystko z usługą http.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-22 16:09:28
Jedną rzeczą, którą zauważyłem podczas używania $resource nad $http jest jeśli używasz Web API w. Net
$ zasób jest powiązany z jednym kontrolerem, który wykonuje jeden cel.
$ resource ('/user/: userId', {userId:'@id'});
[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)
{
}
Podczas gdy $http może być cokolwiek. wystarczy podać adres url.
$http.get - "api/authenticate"
[HttpGet]
public bool Authenticate(string email, string password)
{
return _authenticationService.LogIn(email, password, false);
}
To tylko moje zdanie.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-06 02:13:20
Usługa $ resource obecnie nie obsługuje obietnic i dlatego ma wyraźnie inny interfejs do usługi $ http.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-12 12:18:49