Was ist der Vorteil der Verwendung von Restangular gegenüber ngResource?

133

ngResourceschon scheint es wirklich einfach zu sein, Dinge mit ...

Was sind die Vor- und Nachteile der Verwendung von Restangular gegenüber ngResource ?

1.1.3 $resourcegibt Versprechen zurück und kann mit dem neuesten PR-Commit implementiert werden . Wird zukünftige Unterstützung angeboten, $resourceum zusätzliche Verben zu unterstützen, die Restangular verwendet? Und wenn das passiert, scheint Restangular zu verschwinden und irrelivant zu werden.

Dan Kanze
quelle
41
Warum nah? Dies ist eine gültige Frage, die endgültige Antworten haben sollte. Besonders so früh im Spiel, wenn Sie versuchen zu entscheiden, was Sie für Ihre Serviceanrufe verwenden möchten. Was passiert in drei Monaten, wenn dieser Typ die Unterstützung für Restangular einstellt, weil Googles ngResource alle fehlenden Funktionen eingeholt hat? Wenn dann größere $httpRelease-Änderungen an anglejs vorgenommen werden, können Sie kein Upgrade durchführen, da die Serviceanrufe von Restangualr "etwas anderes" erwarten und Sie dieses Framework, für das Sie sich entschieden haben, entkernen werden.
Dan Kanze
1
Überprüfen Sie sie hier github.com/mgonto/restangular/blob/master/…
mgonto
@DanKanze: Mittlere SO-Benutzer sind mit Fragen wie diesen sehr zufrieden. Es ist wirklich frustrierend, da Sie definitiv nicht fragen, "was besser ist" ... Mein einziger Vorschlag wäre, Fragen in Zukunft sorgfältig zu formulieren, um die "subjektive Gestapo" nicht dazu zu verleiten, in ihrer ganzen Macht auf Sie herabzusteigen.
Rinogo

Antworten:

232

Ich bin der Schöpfer von Restangular.

Ich habe einen Abschnitt in der README-Datei mit den Unterschieden zu $ ​​resource erstellt. Sie können sie hier überprüfen https://github.com/mgonto/restangular/blob/master/README.md#differences-with-resource

Zusammenfassend lässt sich sagen, dass Restangular neben den zusätzlichen Funktionen und dem auf Versprechen basierenden Ansatz auch alle Ihre URLs verarbeiten kann, sodass Sie nichts darüber wissen müssen.

Angenommen, Sie haben so etwas für Autos: / users / 123 / cars / 456

In $ resource müssten Sie diese URL manuell erstellen und das $ resource-Objekt dafür manuell erstellen. Restangular hilft Ihnen dabei, indem es sich die URLs "merkt".

Also, wenn Sie an einem Ort tun

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')

Hoffe das hilft!

mgonto
quelle
45
+1 für das Einspringen. Wer könnte es besser erklären als der Typ, der es selbst gebaut hat, haha!
Dan Kanze
27
Wie ist .one('users', 123)mehr oder weniger "Wissen" über Ihre URL als '/users/123'? (spielt nur Devil's Advocate) Es scheint nur '/foo/123/bar/123'viel einfacher zu sein als .one('foo', 123).one('bar', 123).
Ben Lesh
5
Die Idee ist, dass Sie irgendwann nur noch den Entitätsnamen und die ID kennen. Also machst du zuerst etwas Lüge var user = Restangular.one('users', 123).getList(). Später im Code oder in einem anderen Controller tun Sie dies user.getList('buildings'). Hier kennen Sie nur den nächsten Typ, nämlich Gebäude, aber er fragt ab /users/123/buildings/, sodass Sie nicht immer die vollständige URL kennen müssen
mgonto
3
Gut aber einseitig. Die mögliche "Irrelevanz" von Restangular wurde in diesem Thread in Bezug auf die jüngsten Verbesserungen von $resource- Ich impliziere nicht, dass es in keiner Weise irrelevant wird, nur dass es erwähnt wurde. Gibt es sachliche Nachteile oder Fallstricke, die wir beachten sollten?
Youri
3
Ist nicht viel von dem, was in dieser README mit einer aktuelleren Version von ngresource veraltet ist? (dh / Verwendung von Versprechungen, Dekorieren des
Antwortobjekts
8

Ich fand Restangulars RequestInterceptor sehr praktisch, um einige Felder aus dem Objekt zu entfernen, bevor ich die Anfrage stellte. Die meisten REST-Webservices, mit denen ich derzeit arbeite, erwarten die ID in den Objektdaten in einer PUT-Anforderung beispielsweise nicht, nur in der URL. Im Allgemeinen erwarten sie keine zusätzlichen Datenfelder, die nicht durch PUT aktualisiert werden können (wie die ID oder ein Slug, der durch Festlegen des Titels usw. generiert wird). Ich fand das mit Restangular unkompliziert, obwohl ich nicht herausgefunden habe, wie ich es mit $ resource auf saubere Weise machen soll, aber ich bin mir sicher, dass es irgendwie möglich ist.

Natürlich könnte man auch den Webservice ändern, um diese zusätzlichen Felder einfach zu ignorieren, aber das ist nicht immer möglich.

awdng
quelle
3

ngResource gibt in der neuesten stabilen Version (derzeit 1.0.6) keine Versprechen zurück. Außerdem sieht es so aus, als ob Restangular mehr Verben als ngResource verfügbar macht (es setzt PUT, OPTIONS, PATCH usw. offen).

Wenn Sie die zusätzlichen Verben nicht benötigen und sich im instabilen Zweig von AngularJS befinden (der Versprechen für ngResource enthält), sehe ich keinen wichtigen Grund, Restangular über ngResource zu verwenden.

Verwenden Sie alles, womit Sie sich wohl fühlen.

rtcherry
quelle
2
1.1.3 $resourcegibt Versprechen zurück und kann mit dem neuesten PR-Commit implementiert werden. stackoverflow.com/questions/16429832/… Wird zukünftiger Support angeboten $resource, um zusätzliche Verben zu unterstützen? Und wenn das passiert, scheint Restangular zu verschwinden und irrelivant zu werden.
Dan Kanze
@DanKanze Ich bin mir nicht sicher über die zukünftige Unterstützung für zusätzliche Verben. In den meisten Anwendungsfällen sind die zusätzlichen Verben nicht erforderlich, daher würde ich nicht erwarten, dass sie bald eingebaut werden, aber das bedeutet nicht, dass dies nicht passieren wird.
Rtcherry
2
@ DanKanze - Ich bezweifle, dass es irrelevant werden würde. Restangular bietet eine viel bessere Unterstützung für verschachtelte Ressourcen, was für einige Entwickler eine Voraussetzung ist. Etwas, das Ng-resource nicht besonders gut unterstützt. Darüber hinaus folgt ng-resource auch nicht den RESTful-Konventionen, über die ich in meinem Blog gesprochen habe.
Oddman
@Oddman guter Punkt über verschachtelte Ressourcen Mate, besonders nützlich für Rails Backends.
Ardochhigh
1

Im Anschluss an die obigen Antworten und für neue Leser wie mich, die an diesen Gedanken interessiert sind:

"Und wenn das passiert, scheint Restangular zu verschwinden und irrelivant zu werden."

"Was passiert in drei Monaten, wenn dieser Typ die Unterstützung für Restangular einstellt, weil Googles ngResource alle fehlenden Funktionen eingeholt hat?"

  • [vor 2 Jahren gefragt ]

Meiner Meinung nach ist die einzige Garantie für das Überleben einer Open-Source- Bibliothek die darauf aufbauende Community. Ein bestes Beispiel wären mariaDB und WebScaleSQL, die beide als wachsende Grundlage für das großartige relationale Datenbankverwaltungssystem MySQL geboren wurden.

Zum jetzigen Zeitpunkt geht Restangular having 6699 stars and 727 forksnun zu Restangular 2.0 über, das AngularJs 2.0 und ES6 unterstützen soll.

Salem Ouerdani
quelle
0

Für eine schnelle, einfache Website, die Sie mit minimaler Unterstützung für immer betreiben möchten, würde ich den integrierten eckigen http HttpClient verwenden, wer auch immer, wenn ich an einem Projekt arbeite, das ich liebe und das mir Spaß macht und ich versuche, alle coolen Technologien zu nutzen Ich werde Ngx-Restangular verwenden

Außerdem sollten Sie wissen, dass ngx-restangular nur mit RESTful-Diensten funktioniert, wie der Name schon sagt. Für Dienste, die SOAP bereitstellen, können Sie Ngx-Restangular nicht verwenden

https://ngx-restangular.com/

That being said Ich würde NGX-restangular der meisten die Zeit nutzen , wie ich die Arbeit an Projekt immer versuchen , dass ich kühl finden und versuchen , das umzusetzen , was ich denke , ist am besten.

Viel Glück!

Nour Lababidi
quelle