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?

Author: Cœur, 2012-11-01

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.

 163
Author: Ben Lesh,
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 to REST, 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).

 204
Author: bluehallu,
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.

 38
Author: Qiang,
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:

  1. $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ą.
  2. $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.
  3. 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 .thenw 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.
  4. $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."

 28
Author: Matthew Marichiba,
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

 22
Author: sparrkli,
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.

 7
Author: Dalorzo,
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.

 2
Author: john Smith,
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.
 2
Author: jayson.centeno,
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.

 0
Author: firdous,
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