结合Rack::Builder和Rack::Cascade

3

如果这个问题已经有人问过,我很抱歉,但是我还没有找到。

我有一些Grape APIs(它们是Rack应用程序),其中一个API(用户API)使用中间件进行身份验证。

在我的config.ru文件中,我通过Rack::Cascade将所有API组合成了一个应用程序。下面是代码:

user_management = Rack::Builder.new {
  use Middleware
  run UserAPI.new
}
app = Rack::Cascade.new [
    user_management,
    ExampleAPI1,
    ExampleAPI2,
    ExampleAPI3
]

问题在于每次API收到请求时都会调用中间件。
请问有没有关于如何只在用户API收到请求时使用中间件的建议?
1个回答

2
这个问题的答案是,我需要从API中删除资源(例如resource:user),然后按照以下方式使用Rack::Builder来实现:
app = Rack::Builder.new {
    map '/user' do
        use Middleware
        run ExampleAPI1
    end

    map '/items' do
        run ExampleAPI2
    end

    map '/locations' do
        run ExampleAPI3
    end

    map '/reports' do
        run ExampleAPI4
    end
}

Rack::Cascade存在的问题在于它会从上到下依次尝试每个应用,直到找到合适的终点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接