Получение токена из ответа API

У меня есть API, к которому я подключаюсь, и в соответствии с документацией я предполагаю получить login_token из моего 1-го вызова API. Я устанавливаю метод инициализации с помощью httparty, и я получаю токен, но я не уверен, как разместить его в моем методе инициализации или почему я не могу правильно его проанализировать.

Вот способ инициализации:

  def initialize(username,password)
    @username = username
    @password = password
    @login_token = login_token
    get_token(self.class.post("/login/", body: {username: username, password: password}).parsed_response)
  end

Также вот созданный мной метод get_token, который должен получить токен:

  def get_token
    if response ['success'] == 'true'
      login_token = @login_token
    else
      raise "Code: #{response["message"]}"
    end
  end

Я получаю такой ответ:

reading all...
-> "{\n  \"login_token\": \"...token...\", \n  \"success\": true\n}"
read 99 bytes
Conn close
MultiXml::ParseError: Start tag expected, '<' not found

Я думаю, что моя ошибка связана с частью parsed_response в методе инициализации. Есть идеи о том, что не так и как я могу поместить этот токен в свой метод?

-РЕДАКТИРОВАТЬ-

Вверху этого файла я изменил

format :xml

to

format :json

Теперь моя ошибка в моем методе get_token. Кажется, он неправильно прочитал ответ.


person SupremeA    schedule 21.02.2015    source источник
comment
Похоже, вы возвращаете JSON, но пытаетесь разобрать как XML. Не уверен, почему это так.   -  person Philip Hallstrom    schedule 21.02.2015


Ответы (1)


Я понял! Я изменил тип ответа на json и использовал

instance_variable_set 

чтобы заставить его работать!

def get_token(response)
      response.each { |login_token, value | instance_variable_set("@#{login_token}", value ) }
  end
person SupremeA    schedule 22.02.2015