Rails - 根据API版本向响应添加自定义标头

时间:2015-07-06 18:34:44

标签: ruby-on-rails ruby rest http-headers rack

我想做的很简单。 Rails REST API有多个版本。所以,有一些路线,如:

http://www.example.com/v1/user.json
http://www.example.com/v2/user.json
http://www.example.com/v3/user.json 

我想要做的是根据请求的API版本端点向响应中添加自定义http标头。

在我的config / application.rb文件中,我尝试了:

config.action_dispatch.default_headers.merge!('my_header_1' => 'my_value_1', 'my_header_2' => 'my_value_2')

我也在config / routes.rb文件中试过这个:

scope path: "v1", controller: :test do
    get "action_1" => :action_1
    get "action_2" => :action_2
    Rails.application.config.action_dispatch.default_headers.merge!('my_header_1' => 'my_value_1', 'my_header_2' => 'my_value_2')
end

但是,无论API版本端点如何,这两个片段都会将自定义标头附加到响应中。

我想我可以编写一个检查请求网址的中间件,并根据它添加响应标头,但听起来有点hackish。

有没有更好的方法来实现这一目标?最好是通过配置还是一些中心代码?

1 个答案:

答案 0 :(得分:9)

在控制器上使用before_action怎么样?我想每个API版本都有自己的控制器?这样你可以做类似的事情:

class API::V1::BaseController < ApplicationController
  before_action :set_headers

  protected

  def set_headers
    response.headers['X-Foo'] = 'V1'
  end
end