2010-12-08 32 views
3

J'ai un compte de classe, souhaitez mettre en œuvre des écrans de transfert pour permettre à un utilisateur de transférer de l'argent entre 2 comptes.Ruby on Rails question de conception REST - transférer de l'argent entre les comptes

Comment est-ce que j'aurais pu mettre en place cette méthode RESTfull? J'ai le compte standard et les actions de repos pour cela, c'est très bien. Mais comment pourrais-je mettre en œuvre le transfert?

Normalement, je voudrais juste ajouter une méthode appelée "transfert" (appelé pour rendre l'écran) et "transfer_update" (appelé soumettre) au contrôleur de comptes et les vues correspondantes, mais je ne pense pas que ce soit très RESTfull.

grâce Joel

Répondre

3

Vous mentionnez votre classe de compte, mais pas la classe qui représente les publications ou les journaux. Voir http://homepages.tcp.co.uk/~m-wigley/gc_wp_ded.html (Archived). En utilisant la langue du site référencé, la «ressource» créée pour un transfert est un journal (entrée), composé de deux écritures, chacune pour des comptes différents. Donc, vous voulez un journalController. Pour ajouter un transfert, vous devez POST à ​​l'action d'index du journalController. L'utilisation de REST sur AccountsController permet de créer, de mettre à jour ou de supprimer des comptes, et non des écritures (transactions) contenues dans des comptes.

1

Le livre RESTful Web Services a un bon exemple de la façon d'aborder ce problème exact, et ce qui est mieux, l'exemple est en Rails :)

Si vous ne pouvez pas le vérifier à partir une bibliothèque, que diable, juste acheter la chose. Ce n'est pas si cher et il a beaucoup d'informations utiles sur la façon de mettre en œuvre REST et ROA.

3

Exemple d'une requête reposante pour effectuer un transfert.

POST /transfers HTTP/1.1 
Host: restful.bank.com 
Content-Type: application/json; charset=utf-8 
Accept: application/json 

{ "transfer": { 
    "source_account_id": "9d2d894c242f391a", 
    "destination_account_id": "83ac039d8302abd5" 
    "amount": "$200.00" 
} } 

Réponse correspondante.

HTTP/1.1 201 Created 
Date: #{right-now} 
Content-Type: application/json; charset=utf-8 
Location: https://restful.bank.com/transfers/938ac39cb5ddccfa 

{ "transfer": { 
    "id": "938ac39cb5ddccfa", 
    "href": "https://restful.bank.com/transfers/938ac39cb5ddccfa", 
    "source_account_id": "9d2d894c242f391a", 
    "destination_account_id": "83ac039d8302abd5" 
    "amount": "$200.00" 
} } 
+0

Mais ici le verbe "transfert" est utilisé, n'est-ce pas un signe que ce n'est pas REST? – jhegedus

+1

@jhegedus Le mot "transfert" est utilisé ici comme un nom, pas comme un verbe. – yfeldblum