葡萄中的通配符路线

Wildcard route in Grape

我在让 Grape 响应纯通配符路由时遇到问题。

我的意思是,如果我有一条定义为

的简单路线
get do
...
end

我需要回复对 API 提出的所有潜在请求。情况是我需要解析路径和参数,然后根据这些值处理决策树。

我尝试了一些路由定义的变体,例如:

get '/*' do
...
end

get '/(*)' do
...
end

但是没有用。

我知道在 Grape 中有一些对正则表达式和路由锚定的支持,但我一直没搞清楚。

谢谢!

你已经猜到了语法,你只需要命名匹配的参数:

例如

  get '*thing' do
    { :thing => params[:thing] }
  end

使用 * 将使参数捕获 URI 路径的其余部分,忽略 / 分隔符。但除此之外,它的行为就像任何其他参数一样。

请注意,这最多只会在机架安装点内拾取,所以如果你有

  prefix      'api'
  version     'v2'

然后它将响应像 /api/v2/hkfhqk/fwggw/ewfewg

这样的路径

如果您将此用于自定义 404 或其他包罗万象的路由,则需要将其添加到末尾,否则它会屏蔽更多特定路由。