Как извлечь данные из запроса на получение с помощью Ruby Grape

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

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

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

person learnvst    schedule 25.10.2014    source источник
comment
Проблемы возникают из-за надоедливой точки с запятой в данных о местоположении. Если это была просто запятая, то ячейка содержит оба числа.   -  person learnvst    schedule 25.10.2014


Ответы (1)


Это как работает Rack::Utils. Разделителями параметров по умолчанию являются "&" и ";" (это абсолютно законно в соответствии со стандартом HTTP). Таким образом, вам нужно самостоятельно разобрать строку запроса.

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

UPD: исправлена ​​опечатка с решеткой.

person Pavel S    schedule 25.10.2014
comment
если я заменю params.to_yaml вашим предложением, переменная местоположения будет пустой - person learnvst; 25.10.2014
comment
Опечатка @learnvst исправлена, попробуйте еще раз. Идея здесь в том, что Rack::Utils.parse_nested_query(env['QUERY_STRING'], '&') возвращает вам хэш параметров, разделенных ТОЛЬКО знаком &. Все остальное тривиально. - person Pavel S; 25.10.2014