2009-10-29 4 views
1

Je demande une API interne avec beaucoup d'interfaces différentes, chacun est REST:rubis et HTTParty

/utilisateurs/

/utilisateurs/nom d'utilisateur/ contacts/

/utilisateurs/__ username_/propriétés/

.....

Toutes ces interfaces ont une authentification commune via un appel à

/login

et retourner un auth_key qui doivent être utilisés dans tous les autres appels

Je fait une classe chaque interface, quelque chose comme:

class MyApi::Users 
    include HTTParty 

    def initialize(username, password) 
    init = MyApi::Auth.new(username, password) 
    @auth_token = init.auth["id"] 
    end 

    def create(options) 
    end 

    def show(username) 
    end  

    def update(username, options) 
    end 

    def destroy(username) 
    end 

end 

Donc, après avoir codé toute la classe, mon problème est de savoir si je dois appeler 2 diffe louer interfaces un après l'autre comme:

def test 
    user = MyApi::Users.new("user", "password") 
    user = user.show("toto") 
    contacts = MyApi::Contacts.new("user", "password") 
    contacts = contacts.list(user.id) 
end 

Comme vous le voyez je dois authentifier deux fois et mes instances ont chacun un jeton différent, avez-vous une idée comment je pourrais l'améliorer sans connexion deux fois. Merci,

Répondre

1

Bonjour mike, pourquoi vous authentifiez-vous à chaque appel? Sans connaître votre application, il semblerait que vous deviez utiliser des sessions, et authentifier seulement la première fois que c'est nécessaire.

Il ne devrait pas être nécessaire de passer le nom d'utilisateur et le mot de passe dans les contrôleurs en-dehors du contrôleur de connexion/authentification

Quelque chose comme la logique auth aura un before_action en vous assurant utilisateur est authentifié et vous donnant accès à CURRENT_USER

+0

Je ne suis pas en utilisant des rails sessions Nether ou logique auth, et c'est mon problème, je ne veux pas authentifier deux fois, J'ai besoin d'un motif pour pouvoir le faire. – Mike

+0

Désolé mon hypothèse – ADAM

+0

Mike pouvez-vous clarifier ce que vous utilisez pour servir la ressource reposante si vous n'utilisez pas de rails. Utilisez-vous votre propre cadre, sinatra, etc Certains d'entre eux ont des moyens de garder l'état et certains d'entre eux ne le font pas. Comme évidemment la réponse à cela consiste à garder l'état sur le côté serveur et à le réutiliser côté client – ADAM