2012-03-12 56 views
3

我目前正在为我的Rails后端构建一个Android应用程序。RESTful RAILS和Android HttpRequests

我创建了api_tokens_controller,当用户使用HttpPost从Android登录并在Rails用户表和Android共享首选项中保存该令牌时创建api_token。我能够验证这一点。

我想送api_token为PARAMS [:api_token]从我的Android应用程序与在初始登录后每个后续请求,并有Rails的验证:

在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 

如果用户存在,则将其他数据作为JSONObjects发送。

我在这里概念上遇到麻烦。我现在试图让Android应用程序以 ...:3000 /用户和HttpGet用户数据作为JSONObjects。问题是我不知道如何从Android应用程序发送api_token到HttpGet中的Rails。我假设,因为它是RESTful,我的HttpRequests必须对应轨道路线工作的方式。

问题:

  1. 是否有可能在JSONObject的发送则params的[:api_token]从Android应用到Rails中HTTPGET?

  2. 我的HttpRequests是否必须符合Rails的REST风格,或者我可以只使用HttpPost?

感谢

回答

1

如果我理解正确的话,那么你只是想,如果使用GET的API权杖加为URL参数,所以像:

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

这会将api_token放在params哈希中,就像POST数据一样。 REST风格的方式是使用GET从API中检索数据并使用POST发送数据,即在后端更改数据,但如果要返回带有请求的用户,那么GET无论如何都是正确的方法。

+0

嗨汤姆,谢谢你的回答。通过移动应用程序,我必须发送数据(api_token)并接收每个请求的数据。我可以使用HttpPost发送登录信息,并在apitokenscontroller创建操作的同时,从rails接收api_token。我试图通过这个api_token去用户控制器发送它进行验证,并在一个请求中返回所有数据。我的问题是轨道路线的工作方式,其中http请求的类型(GET,POST,PUT等)和路线(/用户,用户/ 1等)确定行动。 – railslearner 2012-03-13 01:03:14

+0

嗨汤姆,我一直在阅读更多,我认为你的答案可能是。我无法理解URL参数,因为或导轨RESTful路由。 HttpPost允许我在URL中没有任何改变的情况下发送params [],并且我认为HttpGet也应该有类似的东西。但是,如果我只能通过URL发送参数并将其指定为...:3000/users.json?api_token = token,是否必须在rails侧(在UsersController的索引中)指定params [:api_token]为预期?谢谢 – railslearner 2012-03-14 20:37:09

+0

我验证了这个作品 – railslearner 2012-03-15 00:02:16

0

我是一名前Ruby on Rails开发人员。

我同意汤姆,你可以传递一个HTTP GET作为参数的api_token。

关于第二个问题,我会说,REST风格的方法是使用所有可以采取的API在不同的行动HTTP动词。你可以改变你的航线使用HTTP POST,然后提供额外的参数来区分说,创建和更新(以模拟PUT)。但是,我不认为这是前进的方向。

不过,好消息是,你是否在你的Android应用程序中使用的HttpClient或HttpURLConnection的,你将有机会获得你所需要的不同的HTTP动词。对于HttpClient的,它实际上是不同的类,比如HTTPGET,HttpPost,HttpPut和HttpDelete然后您可以通过提供URL和其他参数配置。对于HttpURLConnection的,你只需要调用它像这样:

setRequestMethod("PUT"); 

以下是有关文件上HttpUrlConnection

HttpURLConnection的默认使用GET方法。如果setDoOutput(true)被调用,它将使用POST。其他HTTP方法(OPTIONS,HEAD,PUT,DELETE和TRACE)可以和setRequestMethod(String)一起使用。

+0

谢谢你的建议louislouie。 – railslearner 2012-03-15 00:01:36