Quelle est la différence entre ces deux? Les deux semblent faire un GET à/users et les récupérer.
Restangular.one('users').getList().then(function(users) {
// do something with users
});
Restangular.all('users').getList().then(function(users) {
// do something with users
});
Je comprends que vous pouvez en faire un ('users', 123) et il récupérera/users/123 mais sans le deuxième argument, cela semble être la même chose. Pourquoi ne pas avoir une seule méthode dans ce cas?
La fonction one()
a un deuxième argument qui accepte un identifiant, par exemple .one('users', 1)
.
one('users', 1).get()
se traduit par /users/1
all('users').getList()
se traduit par /users
Contrairement à all()
, one()
n'est généralement pas utilisé avec .getList()
sans argument. Cependant, si vous appelez .one('users', 1).getList('emails')
ou .one('users', 1).all('emails').getList()
, vous feriez une demande GET à /users/1/emails
.
Je suppose qu'ils sont là pour exprimer une intention de ce que vous allez faire. Je les comprendrais comme un moyen de créer l'URL, en exprimant si vous accédez à la ressource entière ou à une ressource spécifique.
En fin de compte, ils vont construire et faire une demande GET mais parce que vous faites un GET et récupérez certaines données, cela ne signifie pas qu'elles devraient être utilisées de cette façon.
Exemple extrait de https://github.com/mgonto/restangular/issues/45
getList peut être appelée dans les deux sens. S'il est appelé dans un élément, il a besoin d'un sous-élément pour accéder à une collection. Sinon, il récupère la collection. Donc, ce qui suit est le même:
Restangular.one('places', 123).getList('venues') // GET /places/123/venues
Restangular.one('places', 123).all('venues').getList() // GET /places/123/venues
Comme vous pouvez le voir, il est plus expressif d'appeler un ('lieux', 123) .tous ('lieux') pour comprendre que vous voulez juste que les lieux soient situés dans la zone/place 123.
Peut-être que l'URL suivante vous aidera:
J'ai récemment découvert une différence entre ces méthodes. Oui, les deux font les mêmes requêtes get, mais les résultats que vous obtenez pourraient vous surprendre (comme ils m'ont surpris).
Supposons que nous ayons une méthode API/utilisateurs qui ne renvoie pas strictement un tableau, mais quelque chose comme ceci:
{
"result": [{...}]
}
Ainsi, un tableau est renvoyé en tant que valeur d'un accessoire de l'objet de réponse. Dans ce cas, get () et getList () fonctionnent différemment. Ce code fonctionne bien:
Restangular.get('users').then(function (response) {...});
Votre gestionnaire de réponse est invoqué une fois la réponse reçue. Mais ce code ne semble pas fonctionner:
Restangular.all('users').getList().then(function (response) {...});
Le gestionnaire de réponse n'est pas appelé, malgré le fait que la demande s'est terminée avec le code d'état 200 et une réponse non vide. La console du navigateur n'affiche aucune erreur et le moniteur réseau affiche une demande réussie.
J'ai testé cela avec Restangular 1.5.2 donc c'est probablement déjà corrigé dans les versions plus récentes.