Mam usługi sieciowe, do których chcę zadzwonić. $resource
lub $http
którego powinienem użyć?
$resource
: https://docs.angularjs.org/api/ngResource/service/$resource
$http
: https://docs.angularjs.org/api/ng/service/$http
Po przeczytaniu dwóch powyższych stron interfejsu API zgubiłem się.
Czy możesz mi wyjaśnić prostym językiem angielskim, jaka jest różnica iw jakiej sytuacji powinienem ich użyć? Jak uporządkować te wywołania i poprawnie odczytać wyniki w obiektach js?
Odpowiedzi:
$http
jest do ogólnego zastosowania AJAX. W większości przypadków będziesz tego używać. Z$http
idziesz do tworzeniaGET
,POST
,DELETE
typ połączenia ręcznie i przetwarzania obiektów wrócą na własną rękę.$resource
okłady$http
do użytku w scenariuszach interfejsu API sieci Web RESTful.Mówiąc bardzo ogólnie: serwis internetowy spokojny będzie serwis z jednego punktu końcowego dla typu danych, który robi różne rzeczy z tego typu danych w oparciu o metody HTTP podoba
GET
,POST
,PUT
,DELETE
, itd. Tak więc z$resource
, można nazwać toGET
, aby uzyskać zasób jako obiekt JavaScript, a następnie zmień go i odeślij za pomocąPOST
, a nawet usuń za pomocąDELETE
.... Jeśli to ma sens.
źródło
$resource
usługi będzie jedynie idiomatyczne / dobrze, jeśli podpory końcowych RESTGET
,POST
, iDELETE
? Dokumenty ( docs.quarejs.org/api/ngResource.$resource ) pokazują, że otrzymujesz te 3 metody REST$resource
.PUT
lub cokolwiek innego chcesz,GET
,POST
iDELETE
są tylko domyślne. Jeśli masz punkt końcowy, który zajmuje się tym samym zasobem (to ważne) dla więcej niż jednej metody HTTP,$resource
to dobry wybór..$promise
działa dobrzeresolve
dla routingu i wiązania.Wydaje mi się, że inne odpowiedzi, choć poprawne, nie wyjaśniają źródła pytania:
REST
jest podzbioremHTTP
. Oznacza to, że wszystko, co można zrobić,REST
można zrobić,HTTP
ale nie wszystko, co można zrobić,HTTP
można zrobić za pośrednictwemREST
. Dlatego$resource
używa$http
wewnętrznie.Kiedy więc się nawzajem używać?
Jeśli wszystko, czego potrzebujesz
REST
, to znaczy, że próbujesz uzyskać dostęp doRESTful
usługi sieci web,$resource
ułatwi to interakcję z tą usługą.Jeśli zamiast tego próbujesz uzyskać dostęp do WSZYSTKIEGO, co nie jest
RESTful
usługą internetową, musisz iść z tym$http
. Pamiętaj, że możesz również uzyskać dostęp doRESTful
usługi internetowej za pośrednictwem$http
, będzie to o wiele bardziej kłopotliwe niż z$resource
. W ten sposób większość ludzi robi to poza AngularJS, używającjQuery.ajax
(odpowiednik Angulara$http
).źródło
$http
sprawia ogólnego zastosowania AJAX rozmowę, w której ogólny środek może zawierać REST API plusa dla REST API.i
$resource
specjalizuje się w tej części RESTful .Restful Api zaczęło dominować w ostatnich latach, ponieważ adres URL jest lepiej zorganizowany zamiast losowego adresu utworzonego przez programistów.
Jeśli użyję interfejsu API RESTful do skonstruowania adresu URL, byłoby to coś w rodzaju
/api/cars/:carId
.$resource
sposób na pobranie danychTo daje obiekt zasobu , który towarzyszy
get
,save
,query
,remove
,delete
automatycznie metod.$http
sposób na pobranie danychZobacz, jak musimy zdefiniować każdą wspólną operację w interfejsie API RESTFul . Jedną z różnic jest to, że
$http
zwraca,promise
gdy$resource
zwraca obiekt. Istnieją również wtyczki innych firm, które pomagają Angularowi radzić sobie z RESTFul API, np. W wersji prostokątnejJeśli interfejs API jest podobny
/api/getcarsinfo
. Pozostało nam tylko skorzystać$http
.źródło
/api/getcarsinfo
, myślę, że możemy nadal używać$resource
Myślę, że odpowiedź zależy bardziej od tego, kim jesteś w momencie pisania kodu. Użyj,
$http
jeśli nie znasz Angulara, dopóki nie dowiesz się, dlaczego potrzebujesz$resource
. Dopóki nie będziesz mieć konkretnego doświadczenia, jak$http
Cię powstrzymuje i nie zrozumiesz implikacji używania$resource
w kodzie , trzymaj się$http
.Takie było moje doświadczenie: zacząłem swój pierwszy projekt Angular, musiałem wysyłać żądania HTTP do interfejsu RESTful, więc zrobiłem te same badania, co teraz. W oparciu o dyskusję, którą przeczytałem w SO pytaniach takich jak to, zdecydowałem się przejść
$resource
. To był błąd, który chciałbym cofnąć. Dlatego:$http
przykłady są obfite, pomocne i zasadniczo tylko to, czego potrzebujesz. Jasne$resource
przykłady są rzadkie i (z mojego doświadczenia) rzadko wszystko, czego potrzebujesz. Dla początkującego Angulara nie zdasz sobie sprawy z konsekwencji swojego wyboru, dopóki nie utkniesz w dokumentacji i zła, że nie możesz znaleźć pomocnych$resource
przykładów , które mogłyby ci pomóc.$http
to prawdopodobnie mapa mentalna 1 do 1, której szukasz. Nie musisz uczyć się nowej koncepcji, aby zrozumieć, co otrzymujesz$http
.$resource
przynosi wiele niuansów, na które jeszcze nie masz mapy myśli.$http
zwraca obietnicę i jest w.then
stanie, więc pasuje do nowych rzeczy, których uczysz się o Angularu i obietnicach.$resource
, co nie zwraca obietnicy bezpośrednio, komplikuje twoje niepewne zrozumienie podstaw Angular.$resource
jest potężny, ponieważ zagęszcza kod dla wywołań RESTful CRUD i przekształceń dla danych wejściowych i wyjściowych. To świetnie, jeśli masz dość ciągłego pisania kodu w celu przetworzenia własnych wyników$http
. Każdemu innemu$resource
dodaje zagadkową warstwę składni i przekazywania parametrów, która jest myląca.Chciałbym poznać mnie 3 miesiące temu i zdecydowanie powiedziałbym sobie: „Trzymaj się
$http
dzieciaka. W porządku”.źródło
/user/:userId
lub/thing
. Po przejściu do/users/roles/:roleId
tego musisz zmodyfikować adres URL zasobu $ i parametry na podstawie czasownika i równie dobrze możesz użyć $ http w tym momencie.$resource
i zmiany$http
miejsc. Nie mogę wystarczająco podkreślić, jak bardzo chciałbym żałować , że nigdy nie spotkałem$resource
. Prawdopodobnie zmarnowałem ponad tydzień, ścigając niuanse z ostatnich$resource
miesięcy.$http
jest tak łatwe i jednoznaczne, że wszelkie zyski, które można uzyskać,$resource
zostały całkowicie usunięte przez krzywą uczenia się.Myślę, że należy podkreślić, że $ zasób oczekuje obiektu lub tablicy jako odpowiedzi od serwera, a nie nieprzetworzonego ciągu. Więc jeśli masz nieprzetworzony ciąg znaków (lub cokolwiek innego niż obiekt i tablica) w odpowiedzi, musisz użyć $ http
źródło
Jeśli chodzi o wybór między,
$http
albo$resource
technicznie rzecz biorąc, nie ma właściwej lub złej odpowiedzi w istocie, obie postąpią tak samo.Celem
$resource
jest umożliwienie przekazania ciągu szablonu (ciągu 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 szczególnie przydatne podczas interakcji ze źródłem danych RESTFul, ponieważ używają podobnych zasad do definiowania adresów URL.Co
$http
polega na wykonywaniu asynchronicznych żądań HTTP.źródło
$resource
nie można wykonać asynchronicznie? Chciałem tylko wyjaśnić$http
jest najprostszym sposobem na wykonanie asynchronicznych żądań HTTP i co$resource
zasadniczo robi to samo, ale z różnymi parametramiusługa zasobów jest po prostu użyteczną usługą do pracy z REST APSI. kiedy go używasz, nie piszesz metod CRUD (twórz, czytaj, aktualizuj i usuwaj)
O ile mi wiadomo, usługa zasobów to tylko skrót, z usługą http można zrobić wszystko.
źródło
$http.get('/path/to/thing', params)
porównaniu domyResource.get(params)
plus faktycznej konfiguracji dlamyResource
. Więcej kodu z przodu i naprawdę działa płynnie tylko z tym samym rzeczownikiem API. W przeciwnym razie kodujesz tak samo, jakbyś użył $ http.Jedną z rzeczy, które zauważyłem podczas używania $ $ w stosunku do $ http, jest to, że używasz Web API w .net
Zasób $ jest powiązany w jeden kontroler, który wykonuje jeden cel.
$ resource ('/ user /: userId', {userId: '@ id'});
Podczas gdy $ http może być czymkolwiek. wystarczy podać adres URL.
$ http.get - „api / autentify”
to tylko moja opinia.
źródło
Usługa $ $ obecnie nie obsługuje obietnic i dlatego ma wyraźnie inny interfejs niż usługa $ http.
źródło
var myResource = $resource(...config...);
w innym miejscu w serwisie, który wykonujeszreturn myResource.get(..params...)
lub możesz to zrobićvar save = myResource.save(); save.$promise.then(...fn...); return save;