2013-05-14 13 views
132

ngResource bereits scheint wirklich einfach Dinge zu implementieren mit ...Welchen Vorteil bietet Restangular gegenüber ngResource?

Was sind die Vorteile/Nachteile von Restangular über ngResource mit?

1.1.3 $resource wird Versprechen zurückgeben und kann unter Verwendung latest PR commit implimiert werden. Wird die zukünftige Unterstützung $resource angeboten werden, um zusätzliche Verben zu unterstützen, die Restangular tut? Und wenn das passiert, scheint Restangular so zu sein, als würde es verschwinden und irrelivant werden.

+41

Warum schließen? Dies ist eine gültige Frage, die definitive Antworten haben sollte. Vor allem so früh im Spiel, wenn Sie versuchen zu entscheiden, was Sie für Ihre Service-Anrufe verwenden möchten. Was passiert in drei Monaten, wenn dieser Typ die Unterstützung für Restangular absagt, weil Googles ngResource alle Funktionen erfasst hat, die ihm fehlten? Dann, wenn große '$ http' Release-Änderungen an angularjs vorgenommen werden, können Sie nicht upgraden, weil Restangualrs Serviceaufrufe "etwas anderes" erwarten, und Sie werden am Ende dieses Rahmens entkernen, den Sie "entschieden haben, mitzugehen ". –

+1

Überprüfen Sie sie hier https://github.com/mgtto/restangular/blob/master/README.md#differences-with-resource – mgonto

+0

@DanKanze: Mid-Level-SO-Benutzer sind glücklich mit Fragen wie diese. Es ist wirklich frustrierend, da du definitiv nicht fragst, "was besser ist" ... Mein einziger Vorschlag wäre, in der Zukunft Fragen sorgfältig zu formulieren, um die "Subjektive Gestapo" nicht dazu zu verleiten, in ihrer ganzen Macht auf dich herabzusteigen. – rinogo

Antwort

231

Ich bin der Schöpfer von Restangular.

Ich habe einen Abschnitt auf der README mit den Unterschieden gegen $ Ressource erstellt. Sie können sie hier überprüfen

Wie dem auch sei, zusammen mit den zusätzlichen Funktionen und dem vielversprechenden Ansatz ist die Idee, dass Restangular auch alle Ihre URLs verarbeiten kann, so dass Sie nicht wissen müssen irgendetwas über sie.

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

In $ resource, würden Sie diese URL konstruieren müssen manuell und man müsste auch die $ Ressource konstruieren Objekt dafür manuell. Restangular hilft Ihnen dabei, die URLs zu "erinnern".

Also, wenn Sie in 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!

+44

+1 für das Springen auf diese. Wer könnte das besser erklären als der Typ, der es selbst gebaut hat, haha! –

+0

Danke :). Hoffe es ist jetzt klar. Ich habe den Abschnitt der README dank Ihnen hinzugefügt, und ich habe positive Kommentare dazu erhalten, da viele Leute die Hauptunterschiede nicht erkannt haben, da sie in der BIIIG README-Datei verteilt waren. Wenn Sie irgendwelche Zweifel haben, können Sie eine Frage @Github :) – mgonto

+27

wie ist '.one ('users', 123) 'mehr oder weniger" Wissen "über Ihre URL als' '/ users/123''? (nur Devils Advokat spielen) Es scheint einfach so, als wäre '/ foo/123/bar/123'' viel einfacher als' .one ('foo', 123) .one ('bar', 123) '. –

2

ngResource gibt keine Versprechen in der neuesten stabilen Version (derzeit 1.0.6). Darüber hinaus sieht es so aus, als ob Restangular mehr Verben als ngResource verfügbar macht (es macht PUT, OPTIONS, PATCH usw. verfügbar).

Wenn Sie die zusätzlichen Verben nicht benötigen und sich im instabilen Zweig von AngularJS befinden (was Versprechungen für ngResource beinhaltet), sehe ich keinen Hauptgrund, Restangular über ngResource zu verwenden.

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

+2

1.1.3 '$ resource' gibt Versprechungen zurück und kann mit dem neuesten PR-Commit umgesetzt werden. http://stackoverflow.com/questions/16429832/callback-after-async-foreach-angularjs/16447884#16447884 Wird zukünftige Unterstützung für '$ resource' angeboten, um zusätzliche Verben zu unterstützen? Und wenn das passiert, scheint Restangular so zu sein, als würde es verschwinden und irrelivant werden. –

+0

@DanKanze Ich bin mir nicht sicher über zukünftige Unterstützung für zusätzliche Verben. Für die meisten Anwendungsfälle sind die zusätzlichen Verben nicht notwendig, daher würde ich nicht erwarten, dass dies in nächster Zeit geschehen wird, aber das bedeutet nicht, dass es nicht passieren wird. – rtcherry

+2

@DanKanze - Ich bezweifle, dass es irrelevant werden würde. Restangular bietet viel bessere Unterstützung für verschachtelte Ressourcen, was für einige Entwickler eine Voraussetzung ist. Etwas, das Ng-Ressource nicht besonders gut unterstützt. Darüber hinaus folgt ng-resource nicht den REST-konformen Konventionen, über die ich in meinem Blog gesprochen habe. – Oddman

8

Ich fand Restangulars RequestInterceptor ziemlich praktisch, um einige Felder aus dem Objekt zu entfernen, bevor Sie die Anfrage machen. Die meisten REST-Webservices, mit denen ich gerade arbeite, erwarten nicht, dass die ID in den Objektdaten in einer PUT-Anfrage zum Beispiel nur in der URL steht. Im Allgemeinen erwarten sie keine zusätzlichen Datenfelder, die nicht durch PUT aktualisiert werden können (wie die ID oder ein Slug, der durch das Setzen des Titels usw. erzeugt wird). Ich fand das mit Restangular einfach, während ich nicht herausgefunden habe, wie man es mit $ resource sauber macht, 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.

1

Als Follow-up zu den oben genannten Antworten und für neue Leser, wie ich, interessiert sich für diesen Gedanken:

„Und wenn das passiert Restangular wie es scheint, wird verschwinden und irrelivant werden."

‚Was in drei Monaten passiert, wenn dieser Typ Unterstützung für Restangular fällt, weil Googles ngResource auf alle Funktionen gefangen es fehlte.‘

  • [fragte vor 2 Jahren]

meiner Meinung nach der nur Garantie zum überleben einer Open-Source- Bibliothek ist die Gemeinde um sie herum gebaut. ein bestes Beispiel wäre mariaDB und WebScaleSQL, die beide als eine wachsende Gabel zum großen relationalen Datenbankmanagementsystem MySQL geboren wurden.

Zu dieser Zeit geht Restangular having 6699 stars and 727 forks jetzt zu Restangular 2.0 über, das angularJs 2.0 und ES6 unterstützen soll.

Verwandte Themen