2014-02-12 42 views
1

如果我在Grape API请求上设置参数验证,是否可以获得验证参数的哈希值?是否可以过滤葡萄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有限?有点像Rails的strong_parameters如何工作。

回答

1

假设你正在使用的轨道......

您可以创建基类的API的一个强有力的帮手PARAM让你安装端点也可以有这样的帮手:

module StrongParamHelpers 
    def strong_params 
    ActionController::Parameters.new(params) 
    end 
end 

包括此在基类的API的:

helpers StrongParamHelpers 
在每个API端点类

然后,再创建一个辅助方法,一种类似于如何轨做的:

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 

希望有所帮助。

2

可能更容易入手机架:: Utils.parse_nested_query

例如:

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