是否可以过滤请求Grape API的参数?

时间:2014-02-12 20:55:54

标签: ruby-on-rails grape-api

如果我在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的工作方式。

3 个答案:

答案 0 :(得分:2)

从Rack :: Utils.parse_nested_query

开始可能更容易

例如:

params = Rack::Utils.parse_nested_query(env['QUERY_STRING'])

答案 1 :(得分:2)

可能会迟到但对于任何路过的人,您都可以使用declared_paramshttps://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

希望有所帮助。