2014-10-25 1 views
1

Yo API 콜백 기능을 사용하여 grape와 Ruby를 실험하고 있습니다.Ruby Grape을 사용하여 get 요청에서 데이터를 추출하는 방법

나는 이렇게 간단한 예제를 만들 수있다. . .

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

가 어떻게 usernamexy 추출에 대한 갈 것이라고 다음과 같은 형식의 콜백 주어진 별도의 루비 변수로 좌표?

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'], '&')'는'& "로만 분리 된 params의 해쉬를 돌려 준다는 것입니다. 그 밖의 모든 것은 사소한 것입니다. –

관련 문제