2012-03-12 2 views
3

현재 Rails 백엔드 용 Android 앱을 제작 중입니다.RESTful RAILS 및 Android HttpRequests

사용자가 HttpPost를 사용하여 Android에서 로그인하고 Rails 사용자 테이블과 Android 공유 환경 설정에 토큰을 저장할 때 api_tokens를 생성하기 위해 api_tokens_controller를 만들었습니다. 나는 이것을 검증 할 수 있었다.

내가 PARAMS로 api_token을 보내려고하고 있어요 [: api_token]의 초기 로그인하면 모든 후속 요청 내 안드로이드 응용 프로그램에서하고있는 레일 확인 :

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 

사용자가 있으면 JSONObject로 다른 데이터를 보냅니다.

여기서 개념적으로 문제가 있습니다. 나는 이제 Android 앱을 ... : 3000/사용자 및 JSONObjects로 HttpGet 사용자 데이터로 이동하려고합니다. 문제는 HttpGet의 Android 앱에서 api_token을 Rails로 보내는 방법을 모른다는 것입니다. RESTful이기 때문에 HttpRequests는 레일스 경로가 작동하는 방식과 일치해야한다고 가정합니다.

질문 :

  1. 가 PARAMS의 된 JSONObject에 보낼 수 있나요 [: api_token] HttpGet에서 레일에 안드로이드 응용 프로그램에서?

  2. 내 HttpRequests가 Railsful Rails 방식과 일치해야합니까, 아니면 HttpPost 만 사용할 수 있습니까?

덕분에 나는, GET을 사용하는 경우 다음 그냥 URL 매개 변수로에 API 토큰을 추가하려면, 제대로 이해하면

답변

1

그래서 뭔가 같은 :

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

api_token을 POST 데이터와 동일한 params 해시에 넣습니다. RESTful 방법은 API에서 데이터를 검색하고 POST를 사용하여 데이터를 전송하는 것, 즉 백엔드에서 데이터를 변경하는 경우 GET을 사용하는 것이지만 요청을 통해 사용자를 반환하려는 경우 GET이 올바른 방법입니다. .

+0

안녕하세요, 귀하의 답변에 감사드립니다. 모바일 앱을 사용하면 데이터 (api_token)를 보내고 요청할 때마다 데이터를 받아야합니다. 나는 HttpPost를 사용하여 로그인 정보를 보내고 apitokenscontroller가 동작을 생성 할 때 동시에 레일스 끝에서 api_token을 수신 할 수있었습니다. 나는이 api_token과 함께 userscontroller에 가서 검증을 위해 그것을 보내고 하나의 요청으로 모든 데이터를 리턴하려고 노력하고있다. 내 문제는 레일스 라우트가 HTTP 요청 (GET, POST, PUT 등) 및 라우트 (/ users, users/1 등) 유형이 동작을 결정하는 곳에서 작동하는 방식입니다. – railslearner

+0

안녕하세요 톰, 저는 그것에 대해 더 많이 읽었으며 당신의 대답이 그럴 것 같아요. RESTful 경로를 사용하기 때문에 URL 매개 변수를 이해하는 데 문제가 있습니다. HttpPost는 URL에서 아무 것도 변경하지 않고 params []를 보낼 수있게 해 주었고, HttpGet도 이와 비슷한 것을 가져야한다고 생각했습니다. 하지만, URL을 통해서만 매개 변수를 전송할 수 있고 ... : 3000/users.json? api_token = token이라면 레일스 측 (UsersController의 인덱스에서)에 params [: api_token]가 지정되어 있어야합니까? 기대 되는가? 감사합니다 – railslearner

+0

이 작품을 확인했습니다 – railslearner

0

전 루비 온 레일즈 개발자입니다.

Tom은 HTTP get을 사용하여 api_token을 매개 변수로 전달할 수 있다고 동의합니다.

두 번째 질문에 대해서는 RESTful 방법은 API에서 사용할 수있는 여러 가지 동작에 대해 모든 HTTP 동사를 사용하는 것이라고 말하고 싶습니다. HTTP POST를 사용하도록 라우트를 변경 한 다음 추가 작성 매개 변수를 제공하여 작성 W 갱신 (PUT을에 D 레이트하기 위해)을 구별 할 수 있습니다. 그러나 나는 그것이 앞으로 나아갈 길이라고 생각하지 않는다.

그러나 좋은 소식은 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