2014-10-25 2 views
1

Я экспериментирую с виноградом и Ruby, пытаясь сделать функцию обратного вызова Yo API.Как извлечь данные из запроса на получение с Ruby Grape

Я могу сделать простые примеры таким образом. , ,

resource :loc do 
    get ':loc' do   
     params.to_yaml 
    end 
end 

Как будет идти об извлечении username и x и y координаты в отдельную переменную рубинового данного обратного вызова в следующем формате?

http://yourcallbackurl.com/yourendpoint?username=THEYOER&location=42.360091;-71.094159 

Когда данные о местоположении завинчиваются. , ,

--- !ruby/hash:Hashie::Mash 
username: sfsdfsdf 
location: '42.360091' 
"-71.094159": 
route_info: !ruby/object:Grape::Route 
    options: 
    :prefix: 
    :version: v1 
    :namespace: "/loc" 
    :method: GET 
    :path: "/:version/loc/:loc(.:format)" 
    :params: 
     loc: '' 
    :compiled: !ruby/regexp /\A\/(?<version>v1)\/loc\/(?<loc>[^\/.?]+)(?:\.(?<format>[^\/.?]+))?\Z/ 
version: v1 
loc: toto 
format: txt 
+0

Проблемы возникают из-за угасающей точки с запятой в данных о местоположении. Если это была просто запятая, то в этом месте содержатся оба числа. – learnvst

ответ

4

Это how Rack::Utils works. По умолчанию разделители параметров - «&» и «;» (его полностью законно согласно стандарту HTTP). Таким образом, вы должны сами проанализировать строку запроса.

location = Rack::Utils.parse_nested_query(env['QUERY_STRING'], '&')['location'] 
coordinates = location.split(';') 

UPD: опечатка с хеш-ключом исправлена.

+0

Если я заменил 'params.to_yaml' вашим предложением, переменная местоположения пуста – learnvst

+0

исправлена ​​ошибка @learnvst, попробуйте еще раз. Идея здесь заключается в том, что 'Rack :: Utils.parse_nested_query (env ['QUERY_STRING'], '&')' возвращает вам хэш из параметров, разделенных ТОЛЬКО на «&». Все остальное тривиально. –

Смежные вопросы