J'ai implémenté un backend REST/CRUD en suivant cet article comme exemple : http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/ . MongoDB fonctionne localement, mais je n'utilise pas MongoLabs.
J'ai suivi le tutoriel de Google qui utilise ngResource et un modèle Factory et j'ai réussi à faire fonctionner la requête (GET all items), à obtenir un item (GET), à créer un item (POST) et à supprimer un item (DELETE). J'ai des difficultés à implémenter PUT de la manière dont l'API backend le souhaite -- un PUT vers une URL qui inclut l'id (.../foo/) et inclut également les données mises à jour.
J'ai ce bout de code pour définir mes services :
angular.module('realmenServices', ['ngResource']).
factory('RealMen', function($resource){
return $resource('http://localhost\\:3000/realmen/:entryId', {}, {
query: {method:'GET', params:{entryId:''}, isArray:true},
post: {method:'POST'},
update: {method:'PUT'},
remove: {method:'DELETE'}
});
J'appelle la méthode à partir de ce code de contrôleur :
$scope.change = function() {
RealMen.update({entryId: $scope.entryId}, function() {
$location.path('/');
});
}
mais lorsque j'appelle la fonction de mise à jour, l'URL n'inclut pas la valeur de l'ID : c'est seulement "/realmen", pas "/realmen/ID".
J'ai essayé plusieurs solutions, dont l'ajout d'un "RealMen.prototype.update", mais je n'arrive toujours pas à faire apparaître l'entryId dans l'URL. (Il semble également que je doive construire moi-même le JSON contenant uniquement les valeurs des champs de la base de données -- l'opération POST le fait automatiquement pour moi lors de la création d'une nouvelle entrée, mais il ne semble pas y avoir de structure de données qui contienne uniquement les valeurs des champs lorsque je visualise/modifie une seule entrée).
Existe-t-il un exemple d'application client qui utilise les quatre verbes de la manière RESTful attendue ?
J'ai également vu des références à Restangular et à une autre solution qui surcharge $save pour qu'il puisse émettre un POST ou un PUT ( http://kirkbushell.me/angular-js-using-ng-resource-in-a-more-restful-manner/ ). Cette technologie semble évoluer si rapidement qu'il ne semble pas y avoir de bonne solution de référence que les gens puissent utiliser comme exemple.