我正在集成第三方API,并且只需将JSON数据发布到我们的服务器中。
内容类型为application/json
,但有效负载实际上是gzip压缩的。由于内容类型,rails在尝试解析数据时抛出了ActionDispatch :: ParamsParser :: ParseError异常。
我计划编写一个机架中间件来捕获异常并尝试解压缩有效负载,但我只想为该特定操作执行此操作,是否有办法仅针对特定路由执行中间件?
更新
我已经考虑过匹配路径的模式,但理想情况下我喜欢在将来路径发生变化的情况下更加强大的东西。
更新
有关压缩的问题最好通过下面的亚特的评论来解决,并且路由会在另一个问题中得到解答,现在这个问题已被标记为副本。
答案 0 :(得分:3)
您可以轻松地在路径上执行正则表达式匹配,并且仅在路径匹配时执行解压缩代码。在这种情况下,您没有为所有其他路由跳过中间件,但处理检查应该非常轻量级。将其放在 lib / middleware / custom_middleware.rb :
中class CustomMiddleware
def initialize(app)
@app = app
end
def call(env)
@req = Rack::Request.new(env)
if should_use_this?
# Your custom code goes here.
end
end
def should_use_this?
@req.path =~ /^matchable_path/ # Replace "matchable_path" with the path in question.
end
end
然后将以下内容放入 config / environments / production.rb
中config.middleware.use "CustomMiddleware"