Quel est l'avantage d'utiliser Restangular par rapport à ngResource?


133

ngResourcesemble déjà très simple à mettre en œuvre avec ...

Quels sont les avantages / inconvénients de l'utilisation de Restangular sur ngResource ?

1.1.3 $resourcerenverra des promesses et peut être implémenté en utilisant le dernier commit PR . Un support futur sera-t-il proposé pour $resourceprendre en charge des verbes supplémentaires que Restangular fait? Et si cela se produit, Restangular semble disparaître et devenir irréversible.


41
Pourquoi fermer? C'est une question valable qui devrait avoir des réponses définitives. Surtout si tôt dans le jeu lorsque vous essayez de décider quoi utiliser pour vos appels de service. Que se passe-t-il dans trois mois lorsque ce type abandonne le support de Restangular parce que ngResource de Google a rattrapé toutes les fonctionnalités qui lui manquaient. Ensuite, si des $httpmodifications majeures de la version sont apportées à angularjs - vous ne pourrez pas effectuer de mise à niveau car les appels de service de Restangualr s'attendront à "autre chose" et vous allez finir par vider ce cadre que vous "avez décidé d'utiliser".
Dan Kanze


@DanKanze: Les utilisateurs de SO de niveau intermédiaire sont très satisfaits des questions comme celle-ci. C'est vraiment frustrant puisque vous ne demandez certainement pas «ce qui est mieux» ... Ma seule suggestion serait de formuler soigneusement les questions à l'avenir afin de ne pas inciter la «Gestapo subjective» à descendre sur vous dans toute sa puissance.
rinogo

Réponses:


232

Je suis le créateur de Restangular.

J'ai créé une section sur le README avec les différences avec $ resource. Vous pouvez les consulter ici https://github.com/mgonto/restangular/blob/master/README.md#differences-with-resource

Quoi qu'il en soit, en résumé, outre les fonctionnalités supplémentaires et l'approche basée sur la promesse, l'idée est que Restangular peut également gérer toutes vos URL, de sorte que vous n'ayez rien à savoir à leur sujet.

Supposons que vous ayez quelque chose comme ceci pour les voitures: / users / 123 / cars / 456

Dans $ resource, vous devrez construire cette URL manuellement et vous devrez également construire l'objet $ resource pour cela manuellement. Restangular vous aide en cela en "mémorisant" les URL.

Donc si tu le fais dans un endroit

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

J'espère que cela t'aides!


45
+1 pour avoir sauté dessus. Qui de mieux pour expliquer que le gars qui l'a construit lui-même haha!
Dan Kanze

27
comment est- .one('users', 123)ce plus ou moins "savoir" sur votre URL que '/users/123'? (je joue juste l'avocat du diable) Il semble que '/foo/123/bar/123'c'est beaucoup plus facile que .one('foo', 123).one('bar', 123).
Ben Lesh

5
L'idée est qu'à un moment donné, vous connaissez simplement le nom de l'entité et l'identifiant. Alors vous faites d'abord quelque chose de mentir var user = Restangular.one('users', 123).getList(). Plus tard dans le code ou dans un autre contrôleur, vous le faites user.getList('buildings'). Ici, vous connaissez juste le type suivant qui est les bâtiments, mais il interroge /users/123/buildings/, vous n'avez donc pas à connaître l'URL complète tout le temps
mgonto

3
Bon mais unilatéral. La possible "non-pertinence" de Restangular a été suggérée dans ce fil en ce qui concerne les améliorations récentes de $resource- je ne sous-entends pas que cela deviendra hors de propos par quelque moyen que ce soit, juste qu'il a été mentionné. Y a-t-il des inconvénients ou des pièges factuels dont nous devrions être conscients?
youri

3
beaucoup de ce qu'il y a dans ce README n'est-il pas obsolète avec une version plus récente de ngresource? (ie / utilisation de promesses, décoration de l'objet de réponse via transformResponse)
surtyaar

8

J'ai trouvé RequestInterceptor de Restangular assez pratique pour supprimer certains champs de l'objet avant de faire la demande. La plupart des services Web REST avec lesquels je travaille actuellement n'attendent pas l'id dans les données d'objet dans une requête PUT par exemple, juste dans l'URL. En général, ils ne s'attendent pas à des champs de données supplémentaires qui ne peuvent pas être mis à jour par PUT (comme l'identifiant ou un slug généré en définissant le titre, etc.). J'ai trouvé que c'était simple avec Restangular alors que je n'ai pas compris comment le faire avec $ resource de manière propre, mais je suis sûr que c'est possible d'une manière ou d'une autre.

De toute évidence, on pourrait également modifier le service Web pour ignorer simplement ces champs supplémentaires, mais ce n'est pas toujours possible.


3

ngResource ne renvoie pas de promesses dans la dernière version stable (actuellement 1.0.6). De plus, il semble que Restangular expose plus de verbes que ngResource (il expose PUT, OPTIONS, PATCH, etc.).

Si vous n'avez pas besoin des verbes supplémentaires et que vous êtes sur la branche instable d'AngularJS (qui inclut des promesses pour ngResource), je ne vois aucune raison majeure d'utiliser Restangular sur ngResource.

Utilisez ce avec quoi vous vous sentez à l'aise.


2
1.1.3 $resourcerenverra des promesses et peut être implémenté en utilisant le dernier commit PR. stackoverflow.com/questions/16429832/… Un support futur sera-t-il proposé pour $resourceprendre en charge des verbes supplémentaires? Et si cela se produit, Restangular semble disparaître et devenir irréversible.
Dan Kanze

@DanKanze Je ne suis pas sûr de la prise en charge future de verbes supplémentaires. Pour la plupart des cas d'utilisation, les verbes supplémentaires ne sont pas nécessaires, donc je ne m'attendais pas à ce que cela soit intégré de sitôt, mais cela ne signifie pas que cela ne se produira pas.
rtcherry

2
@DanKanze - Je doute que cela devienne hors de propos. Restangular fournit un bien meilleur support pour les ressources imbriquées, ce qui est une exigence pour certains développeurs. Quelque chose que Ng-resource ne supporte pas particulièrement bien. De plus, ng-resource ne suit pas non plus les conventions RESTful, ce dont j'ai parlé sur mon blog.
Oddman

@Oddman bon point sur les ressources imbriquées, particulièrement utile pour les backends Rails.
ardochhigh

1

Pour faire suite aux réponses ci-dessus et pour les nouveaux lecteurs, comme moi, intéressés par ces pensées:

«Et si cela se produit, Restangular semble disparaître et devenir irréversible.

"Que se passe-t-il dans trois mois lorsque ce type abandonne le support de Restangular parce que ngResource de Google a rattrapé toutes les fonctionnalités qui lui manquaient."

  • [ demandé il y a 2 ans ]

À mon avis, la seule garantie de survie d'une bibliothèque open-source est la communauté construite autour d'elle. un meilleur exemple serait mariaDB et WebScaleSQL, qui sont tous les deux nés comme une fourchette croissante du grand système de gestion de bases de données relationnelles MySQL.

À l'heure actuelle, Restangular having 6699 stars and 727 forkspasse maintenant à Restangular 2.0 qui est censé prendre en charge angularJs 2.0 et ES6.


0

Pour un site Web simple et rapide que vous voulez exécuter pour toujours avec le support minimum, j'utiliserais le http HttpClient angulaire intégré qui que ce soit lorsque je travaille sur un projet que j'aime et que j'apprécie et j'essaie d'utiliser toutes les technologies cool alors J'utiliserai Ngx-Restangular

Vous devez également savoir que ngx-restangular fonctionne avec les services RESTful uniquement comme son nom l'indique. Donc, pour les services qui fournissent SOAP, vous ne pourrez pas utiliser Ngx-Restangular

https://ngx-restangular.com/

Cela étant dit , j'utiliserais ngx-restangular la plupart du temps car j'essaie toujours de travailler sur un projet que je trouve cool et d'essayer de mettre en œuvre ce que je pense être le meilleur.

Bonne chance!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.