2012-03-12 3 views
3

Je travaille actuellement sur la construction d'une application Android pour mon backend Rails.RESTful RAILS et Android HttpRequests

J'ai créé api_tokens_controller pour créer un api_token lorsque l'utilisateur se connecte depuis Android en utilisant HttpPost et enregistre ce jeton dans la table des utilisateurs de Rails et les préférences partagées Android. J'ai été capable de vérifier cela.

Je suis en train d'envoyer le api_token comme params [: api_token] de mon application Android à chaque requête après la première connexion et ont Rails vérifier:

En User.rb:

def self.authenticate_with_api_token(api_token_from_mobile) 
    user = find_by_api_token(api_token_from_mobile) 
    if user.nil? 
     return nil 
    else 
    return user 
    end 
end 

si l'utilisateur existe, envoyez d'autres données en tant que JSONObjects.

Je rencontre des problèmes conceptuellement ici. J'essaie maintenant d'avoir l'application Android aller à ...: 3000/utilisateurs et données utilisateur HttpGet comme JSONObjects. Le problème est que je ne sais pas comment envoyer le api_token de l'application Android à Rails dans HttpGet. Je suppose que comme il est RESTful, mon HttpRequests doit correspondre à la façon dont les chemins de rails fonctionne.

Questions:

  1. Est-il possible d'envoyer JSONObject de params [: api_token] de l'application Android pour Rails en HttpGet? Mes requêtes HttpRes doivent-elles correspondre à la méthode RESTful? Rails fonctionne-t-il ou puis-je seulement utiliser HttpPost?

Merci

Répondre

1

Si je vous comprends bien, vous voulez juste ajouter le jeton API comme un paramètre d'URL si vous utilisez GET, donc quelque chose comme:

...: 3000/users.json? api_token = jeton

Ceci placera le fichier api_token dans le hash params exactement comme les données POST. La méthode RESTful consiste à utiliser GET pour extraire des données de l'API et utiliser POST pour envoyer des données, par exemple changer des données sur votre backend mais si vous allez renvoyer un utilisateur avec la requête, GET est la méthode correcte à utiliser quand même. .

+0

Salut Tom, merci pour votre réponse. Avec l'application mobile, je dois envoyer des données (api_token) et recevoir des données à chaque demande. J'ai pu utiliser HttpPost pour envoyer des informations de connexion et recevoir api_token à partir de rails en même temps sous l'action de création apitokenscontroller. J'essaye d'aller à userscontroller avec cet api_token pour l'envoyer pour la vérification et renvoyer des données tout dans une demande aussi bien. Mon problème est avec la façon dont les chemins de rails fonctionnent où le type de requête http (GET, POST, PUT, & etc.) et route (/ users, users/1, etc.) détermine l'action. – railslearner

+0

Salut Tom, j'ai lu plus à ce sujet et je pense que votre réponse pourrait être. J'ai de la difficulté à comprendre le paramètre de l'URL parce que je contourne les routes RESTful. HttpPost m'a permis d'envoyer des params [] sans rien changer dans l'URL, et je pensais que HttpGet devrait avoir quelque chose comme ça aussi. Mais, si je peux seulement envoyer un paramètre via l'URL et que je le spécifie à ...: 3000/users.json? Api_token = token, dois-je spécifier sur le côté rails (dans l'index de UsersController) que params [: api_token] est attendu? Merci – railslearner

+0

J'ai vérifié que cela fonctionne – railslearner

0

Je suis moi-même un ancien développeur de Ruby on Rails. Je suis d'accord avec Tom que vous pouvez simplement passer dans l'api_token en tant que paramètre avec un HTTP GET. Pour votre deuxième question, je dirais que la méthode RESTful consiste à utiliser tous les verbes HTTP pour les différentes actions que vous pouvez effectuer dans l'API. Vous pouvez modifier vos itinéraires pour utiliser HTTP POST, puis fournir des paramètres supplémentaires pour différencier entre Create et Update (pour émuler un PUT). Cependant, je ne pense pas que ce soit la voie à suivre.

Cependant, la bonne nouvelle est que, que vous utilisiez HttpClient ou HttpUrlConnection dans votre application Android, vous aurez accès aux différents verbes HTTP dont vous avez besoin. Pour HttpClient, c'est en fait différentes classes comme HttpGet, HttpPost, HttpPut et HttpDelete que vous configurez ensuite en fournissant l'URL et d'autres paramètres.Pour HttpURLConnection, vous appelez simplement comme ceci:

setRequestMethod("PUT"); 

est ici la documentation pertinente sur HttpUrlConnection:

HttpURLConnection utilise la méthode GET par défaut. Il utilisera POST si setDoOutput (true) a été appelé. D'autres méthodes HTTP (OPTIONS, HEAD, PUT, DELETE et TRACE) peuvent être utilisées avec setRequestMethod (String).

+0

Merci pour vos conseils louislouie. – railslearner