如果我在Grape API请求上设置参数验证,是否可以获得仅经过验证的参数的哈希值?
desc "My Grape API request handler"
params do
requires :name
optional :description
end
post do
puts params.inspect # has all the params passed to request,
# even params not defined in validation block
end
还有另一种方法可以将params
限制在param验证块中列出的那些吗?有点像Rails strong_parameters的工作方式。
答案 0 :(得分:2)
从Rack :: Utils.parse_nested_query
开始可能更容易例如:
params = Rack::Utils.parse_nested_query(env['QUERY_STRING'])
答案 1 :(得分:2)
可能会迟到但对于任何路过的人,您都可以使用declared_params
。
https://github.com/ruby-grape/grape#declared
答案 2 :(得分:1)
假设你正在使用rails ......
您可以在api的基类中创建一个强大的param助手,这样您安装的端点也可以拥有这个帮助器:
module StrongParamHelpers
def strong_params
ActionController::Parameters.new(params)
end
end
将其包含在api的基类中:
helpers StrongParamHelpers
然后在每个api端点类中,您创建另一个类似于rails的方法的辅助方法:
helpers do
def user_params
strong_params.require(:user).permit(:username, :email) # etc...
end
end
然后只需在您的路线中拨打user_params
:
desc "My Grape API request handler"
params do
requires :user do
optional :username
optional :email
# etc
end
end
post do
User.create user_params
end
希望有所帮助。