Ruby on rails 如何使用Grape在Rails中添加公共标头?
有没有什么方法可以让我在Rails中使用Grape实现公共头,这样我就不必反复指定相同的头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
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
也可以,可能更好?但是你必须在每一个资源中定义它。