2012-03-12 48 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