Jaka jest przewaga używania Restangular nad ngResource?

133

ngResourcejuż wydaje się naprawdę proste do wdrożenia rzeczy za pomocą ...

Jakie są zalety / wady korzystania Restangular nad ngResource ?

1.1.3 $resourcezwróci obietnice i może zostać zrealizowane przy użyciu ostatniego zatwierdzenia PR . Czy w przyszłości zostanie zaoferowane $resourcewsparcie dla dodatkowych czasowników, które obsługuje Restangular? A jeśli tak się stanie, Restangular wydaje się, że zniknie i stanie się nieistotny.

Dan Kanze
źródło
41
Dlaczego blisko? To ważne pytanie, na które należy odpowiedzieć definitywnie. Zwłaszcza na tak wczesnym etapie gry, kiedy próbujesz zdecydować, czego użyć do wezwań serwisowych. Co dzieje się za trzy miesiące, kiedy ten facet rezygnuje ze wsparcia dla Restangular, ponieważ ngResource Google dogonił wszystkie funkcje, których brakowało. Następnie, jeśli $httpw angularjs zostaną wprowadzone poważne zmiany w wydaniu - nie będziesz w stanie zaktualizować, ponieważ wezwania serwisowe Restangualr będą oczekiwały „czegoś innego”, a skończysz na wypatroszeniu tego frameworka, z którym „zdecydowałeś się pójść”.
Dan Kanze
@DanKanze: Średni użytkownicy SO są bardzo zadowoleni z takich pytań. To naprawdę frustrujące, ponieważ zdecydowanie nie pytasz „co jest lepsze”… Moją jedyną sugestią byłoby ostrożne formułowanie pytań w przyszłości, aby nie skłonić „subiektywnego gestapo” do zstąpienia na ciebie z pełną mocą.
rinogo

Odpowiedzi:

232

Jestem twórcą Restangular.

Utworzyłem sekcję w pliku README z różnicami w stosunku do $ resource. Możesz je sprawdzić tutaj https://github.com/mgonto/restangular/blob/master/README.md#differences-with-resource

W każdym razie, podsumowując, poza dodatkowymi funkcjami i podejściem opartym na obietnicach, idea jest taka, że ​​Restangular może również obsłużyć wszystkie twoje adresy URL, więc nie musisz nic o nich wiedzieć.

Załóżmy, że masz coś takiego dla samochodów: / users / 123 / cars / 456

W $ resource musiałbyś ręcznie utworzyć ten adres URL, a także musiałbyś ręcznie utworzyć obiekt $ resource. Restangular pomaga w tym, „zapamiętując” adresy URL.

Więc jeśli to zrobisz w jakimś miejscu

Restangular.one("users", 123).get().then(function(user) {
  $scope.user = user;
});

// Some other code

//Automatically does the request to /users/123/cars as it remembers in which object you're asking it.
$scope.user.getList('cars')

Mam nadzieję że to pomoże!

mgonto
źródło
45
+1 za wskoczenie na to. Kto lepiej wytłumaczy to facetowi, który sam go zbudował, haha!
Dan Kanze
27
w jaki sposób .one('users', 123)mniej lub bardziej „wiedzieć” o adresie URL niż '/users/123'? (po prostu grając adwokata diabła) Wydaje się, że '/foo/123/bar/123'jest to o wiele łatwiejsze niż .one('foo', 123).one('bar', 123).
Ben Lesh
5
Chodzi o to, że w pewnym momencie po prostu znasz nazwę jednostki i identyfikator. Więc najpierw coś kłamiesz var user = Restangular.one('users', 123).getList(). Później w kodzie lub w jakimś innym kontrolerze user.getList('buildings'). Tutaj po prostu znasz następny typ, czyli budynki, ale pyta /users/123/buildings/, więc nie musisz cały czas znać pełnego adresu URL
mgonto
3
Dobre, ale jednostronne. Ewentualna „nieistotność” Restangular została zasugerowana w tym wątku w odniesieniu do ostatnich ulepszeń $resource- nie sugeruję, że stanie się nieistotna w jakikolwiek sposób, tylko że została wspomniana. Jakieś faktyczne wady lub pułapki, o których powinniśmy wiedzieć?
twój
3
czy nie jest wiele z tego, co jest w tym README nieaktualnym z bardziej aktualną wersją ngresource? (tj. / wykorzystanie obietnic, dekorowanie obiektu odpowiedzi za pomocą transformResponse)
surtyaar
8

Zauważyłem, że RequestInterceptor firmy Restangular jest całkiem przydatny do usuwania niektórych pól z obiektu przed wysłaniem żądania. Większość usług sieciowych REST, z którymi obecnie pracuję, nie oczekuje identyfikatora w danych obiektu w żądaniu PUT, na przykład tylko w adresie URL. Generalnie nie spodziewają się dodatkowych pól danych, których nie można zaktualizować przez PUT (takich jak id lub slug, który jest generowany przez ustawienie tytułu itp.). Okazało się, że jest to proste w przypadku Restangular, chociaż nie wymyśliłem, jak to zrobić z $ resource w czysty sposób, ale jestem pewien, że jest to możliwe.

Oczywiście można również zmienić usługę sieciową, aby po prostu ignorować te dodatkowe pola, ale nie zawsze jest to możliwe.

awdng
źródło
3

ngResource nie zwraca obietnic w najnowszej stabilnej wersji (obecnie 1.0.6). Dodatkowo wygląda na to, że Restangular ujawnia więcej czasowników niż ngResource (ujawnia PUT, OPTIONS, PATCH itp.).

Jeśli nie potrzebujesz dodatkowych czasowników i znajdujesz się w niestabilnej gałęzi AngularJS (która zawiera obietnice dla ngResource), nie widzę żadnego ważnego powodu, aby używać Restangular zamiast ngResource.

Użyj tego, z czym czujesz się komfortowo.

rtcherry
źródło
2
1.1.3 $resourcezwróci obietnice i może zostać zrealizowane przy użyciu ostatniego zatwierdzenia PR. stackoverflow.com/questions/16429832/… Czy w przyszłości będzie oferowana $resourceobsługa dodatkowych czasowników? A jeśli tak się stanie, Restangular wydaje się, że zniknie i stanie się nieistotny.
Dan Kanze
@DanKanze Nie jestem pewien, czy w przyszłości będą obsługiwane dodatkowe czasowniki. W większości przypadków użycia dodatkowe czasowniki nie są konieczne, więc nie spodziewałbym się, że zostaną one zbudowane w najbliższym czasie, ale to nie znaczy, że tak się nie stanie.
rtcherry
2
@DanKanze - wątpię, czy stałoby się to nieistotne. Restangular zapewnia znacznie lepszą obsługę zagnieżdżonych zasobów, co jest wymagane przez niektórych programistów. Coś, czego Ng-resource nie obsługuje szczególnie dobrze. Ponadto ng-resource również nie przestrzega konwencji RESTful, o czym mówiłem na swoim blogu.
Oddman
@Oddman dobra uwaga na temat zagnieżdżonych mate zasobów, szczególnie przydatna w backendach Railsowych.
ardochhigh
1

W następstwie powyższych odpowiedzi i dla nowych czytelników, takich jak ja, zainteresowanych tymi myślami:

- A jeśli tak się stanie, Restangular wydaje się, że zniknie i stanie się nieistotny.

„Co się dzieje w ciągu trzech miesięcy, kiedy ten facet rezygnuje ze wsparcia dla Restangular, ponieważ ngResource Google dogonił wszystkie funkcje, których brakowało”.

  • [ zapytano 2 lata temu ]

Moim zdaniem jedyną gwarancją przetrwania biblioteki open source jest społeczność zbudowana wokół niej. najlepszym przykładem mogą być mariaDB i WebScaleSQL, które narodziły się jako rosnący rozwidlenie wielkiego systemu zarządzania relacyjnymi bazami danych MySQL.

W chwili pisania tego tekstu Restangular having 6699 stars and 727 forksprzechodzi teraz do Restangular 2.0, który ma wspierać angularJs 2.0 i ES6.

Salem Ouerdani
źródło
0

Do szybkiej, prostej strony internetowej, którą chcesz uruchomić na zawsze z minimalnym wsparciem, użyłbym wbudowanego kątowego http HttpClient, ktokolwiek, kiedy pracuję nad projektem, który kocham i cieszę się i próbuję wtedy używać wszystkich fajnych technologii użyję NGX-Restangular

Powinieneś także wiedzieć, że ngx-restangular działa z usługami RESTful tylko tak, jak sugeruje nazwa. Tak więc w przypadku usług udostępniających SOAP nie będzie można używać Ngx-Restangular

https://ngx-restangular.com/

Biorąc to pod uwagę, przez większość czasu korzystałbym z ngx-restangular, ponieważ zawsze staram się pracować nad projektem, który uważam za fajny i próbuję wdrożyć to, co uważam za najlepsze.

Powodzenia!

Nour Lababidi
źródło