2015-07-06 2 views
2

То, что я пытаюсь сделать, довольно просто. Существует несколько версий Rails API Rails. Таким образом, есть маршруты, такие как:Rails - добавление пользовательских заголовков в ответ на основе версии API

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

То, что я хочу сделать, это добавить заголовки НТТРА в ответ на основе API версии конечной точке, которая запрашивается.

В моей конфигурации/application.rb файл, я попробовал:

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

Я также попытался это в моей конфигурации/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.

Я думаю, что могу написать промежуточное программное обеспечение, которое проверяет URL-адрес запроса и добавляет заголовки ответов на основе этого, но это звучит немного хакерским.

Есть ли лучший способ достичь этого? Предпочтительно через конфигурацию или некоторую центральную часть кода?

ответ

8

Как насчет использования на контроллерах before_action? Я предполагаю, что каждая версия API имеет свои собственные контроллеры? Таким образом, вы можете сделать что-то вроде:

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

    protected 

    def set_headers 
    response.headers['X-Foo'] = 'V1' 
    end 
end 
Смежные вопросы