2012-03-12 3 views
3

В настоящее время я работаю над созданием приложения для Android для моего бэкэнда Rails.RESTful RAILS и Android HttpRequests

Я создал api_tokens_controller для создания api_token, когда пользователь регистрируется на Android с помощью HttpPost и сохраняет этот токен как в таблице пользователей Rails, так и в общих настройках Android. Я смог проверить это.

Я пытаюсь отправить 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. Проблема в том, что я не знаю, как отправить api_token из приложения Android в Rails в HttpGet. Я предполагаю, что, поскольку это RESTful, мои HttpRequests должны соответствовать тому, как работают маршруты маршрутов.

Вопросы:

  1. Можно ли отправить в JSONObject из Params [: api_token] от андроид приложения на Rails в HttpGet?

  2. Должны ли мои HttpRequests соответствовать RESTful пути Rails, или я могу использовать только HttpPost?

Благодаря

ответ

1

Если я вас правильно понял, то вы просто хотите добавить маркер API в качестве параметра URL при использовании GET, так что-то вроде:

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

Это положит api_token в хэши params точно так же, как и данные POST. Метод RESTful должен был бы использовать GET для извлечения данных из API и использования POST для отправки данных, т. Е. Изменения данных на вашем сервере, но если вы собираетесь возвращать пользователя с запросом, GET - это правильный метод, который нужно использовать в любом случае ,

+0

Привет, Том, спасибо за ваш ответ. С мобильным приложением мне приходится отправлять данные (api_token) и получать данные с каждым запросом. Я смог использовать HttpPost для отправки информации для входа и получения api_token из рельсов в то же время при создании действия apitokenscontroller. Я пытаюсь перейти к usercontroller с помощью этого api_token, чтобы отправить его для проверки и возврата данных по одному запросу. Моя проблема связана с тем, как маршруты маршрутов работают, где тип запроса HTTP (GET, POST, PUT и т. Д.) И маршрут (/ пользователи, пользователи/1 и т. Д.) Определяют действие. – railslearner

+0

Привет, Том, я читал на нем больше, и я думаю, что ваш ответ может быть таким. У меня возникли проблемы с пониманием параметра параметра URL-адреса, потому что или маршруты RESTful. HttpPost разрешала мне отправлять параметры [] без каких-либо изменений в URL-адресе, и я думал, что HttpGet тоже должен иметь что-то подобное. Но, если я могу только отправлять параметр через URL-адрес, и я указываю его ...: 3000/users.json? Api_token = токен, мне нужно указать на стороне rails (в индексе UserController), что params [: api_token] ожидается? Спасибо – railslearner

+0

Я проверил, что это работает – railslearner

0

Я бывший разработчик Ruby on Rails.

Я согласен с Томом, что вы можете просто передать api_token в качестве параметра с помощью HTTP GET.

Для вашего второго вопроса я бы сказал, что RESTful способ использовать все HTTP-глаголы для различных действий, которые вы можете предпринять в API. Вы можете изменить свои маршруты, чтобы использовать HTTP POST, а затем предоставить дополнительные параметры для разбора между Create и Update (для эмуляции PUT). Однако я не думаю, что это путь вперед.

Тем не менее, хорошей новостью является то, что используете ли вы HttpClient или HttpUrlConnection в своем приложении для Android, у вас будет доступ к различным HTTP-глаголам, которые вам нужны. Для HttpClient на самом деле это разные классы, такие как HttpGet, HttpPost, HttpPut и HttpDelete, которые затем настраиваются, предоставляя URL и другие параметры.Для HttpURLConnection, вы просто назвать его так:

setRequestMethod("PUT"); 

Вот соответствующая документация на HttpUrlConnection:

HttpURLConnection использует метод GET по умолчанию. Он будет использовать POST, если был вызван setDoOutput (true). Другие методы HTTP (OPTIONS, HEAD, PUT, DELETE и TRACE) могут использоваться с setRequestMethod (String).

+0

Спасибо за ваш совет louislouie. – railslearner