2016-12-06 3 views
0

J'ai une exigence où l'utilisateur peut passer url dans ce format:raisin avec la route dynamique

http:site.com/[action]/[subject]?[option]=[value]

par exemple tous les ci-dessous sont urls valides:

http://example.com/trigger/a/b/c 
http://example.com/trigger/a 
http://example.com/trigger/a/b?something=value 
http://example.com/trigger/any/thing/goes/here 

J'ai un grape ressource comme ceci:

class Test < Grape::API 
    params do 
    optional :option, type: String 
    end 

    get '/trigger/:a/:b/:c' do 
    { 
     type: 'trigger', 
     a: params[:a], 
     b: params[:b], 
     c: params[:c], 
     option: params[:option] 
    } 
    end 
end 

Ainsi, si je visite http://example.com/1/2/3/option=something alors je vais me

{ 
    "type": "trigger", 
    "a": "1", 
    "b": "2", 
    "c": "3", 
    "option": "something" 
} 

Comportement attendu:

utilisation devrait être en mesure de fournir quoi que ce soit après /trigger/

http://example.com/any/thing/goes/here/1/2/3?other=value&goes=here 

Mise à jour:

J'ai trouvé cette solution (How do we identify parameters in a dynamic URL?) pour les rails de route, je veux ce comportement dans grape.

grâce

Répondre

0

Eh bien, en fait, je cherchais wildcards avec matching params

get "trigger/*subject" do 
    { 
    params: params[:subject] 
    } 
end 

Maintenant, il répondra à chemin comme:

curl http://example.com/trigger/subject/can/be/anything 

Sortie:

{ 
params: "subject/can/be/anything" 
} 

Merci à la réponse de Neil Wildcard route in Grape