Ruby on rails 如何使用Grape在Rails中添加公共标头?

Ruby on rails 如何使用Grape在Rails中添加公共标头?,ruby-on-rails,ruby,design-patterns,grape,Ruby On Rails,Ruby,Design Patterns,Grape,有没有什么方法可以让我在Rails中使用Grape实现公共头,这样我就不必反复指定相同的头 namespace :user do desc 'Return a user.', { headers: { "Authorization" => { description: "Some Token", required: true } } } get do {} end end 请注意,在我的所有A

有没有什么方法可以让我在Rails中使用Grape实现公共头,这样我就不必反复指定相同的头

namespace :user do
  desc 'Return a user.', {
    headers: {
      "Authorization" => {
        description: "Some Token",
        required: true
      }
    }
  }
  get do
    {}
  end
end
请注意,在我的所有API中都必须反复指定标题,因为我希望它们是安全的。有没有一种快捷方式(一种设计模式)可以让我不必每次都创建这个标题

不,我不是在找这样的东西:

def headers
  {
    "Authorization" => {
      description: "Some Token",
      required: true
    }
  }
end

namespace :user do
  desc 'Return a user.', {
    headers: headers
  }
  get do
    {}
  end
end
这就是我所做的:

app/api/api.rb

def my_headers
  {
    key1: {
      description: 'hello',
      required: true
    },
    key2: {
      description: 'hello',
      required: false
    }
  }
end

# define my_headers outside of API class

class API < Grape::API
  version 'v1', using: :param, parameter: 'v', vendor: 'Larvata'
  content_type :json, 'application/json'

  # some codes ...
def my_头
{
关键1:{
描述:'你好',
必填项:true
},
关键2:{
描述:'你好',
必填项:false
}
}
结束
#在API类之外定义my_头
类API
app/api/home.rb

class Home < API

 resources :home do

    desc "Home Page", { headers: my_headers }
    get do
      # some codes ...
module Api
  class Home < Grape::API
    resources :home do

      desc "Home Page", headers: Root.headers_definition
        get do
         # some codes ...
        end
      end  
    end
  end
end
class Home

哦,对不起,您正在寻找此解决方案…

这很有效。
您可以添加将头定义返回到api根类并从每个api类调用它的类方法

app/api/root.rb

module Api
  class Root < Grape::API
    def self.headers_definition
      {
        "Authorization" => {
          description: "Some Token",
          required: true
        }
      }
    end

    mount Home
  end
end
模块Api
类根{
描述:“一些令牌”,
必填项:true
}
}
结束
回家
结束
结束
app/api/home.rb

class Home < API

 resources :home do

    desc "Home Page", { headers: my_headers }
    get do
      # some codes ...
module Api
  class Home < Grape::API
    resources :home do

      desc "Home Page", headers: Root.headers_definition
        get do
         # some codes ...
        end
      end  
    end
  end
end
模块Api
类Home
为什么
def头
示例不好?您对该选项的折扣太快了。您始终可以使该方法获取参数并将它们合并到结果哈希中。您可以使用的设计模式是继承。创建始终实现授权标头的基类并从该基类进行扩展。将下面的
def my_headers
移动到
resource:home
也可以,可能更好?但是你必须在每一个资源中定义它。