【问题标题】:Is it possible to filter the params for a request to a Grape API?是否可以过滤对 Grape API 的请求的参数?
【发布时间】:2014-02-12 20:55:53
【问题描述】:

如果我在 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 限制为参数验证块中列出的那些吗?有点像 Rails strong_parameters 的工作原理。

【问题讨论】:

    标签: ruby-on-rails grape-api


    【解决方案1】:

    可能会晚,但任何路过的人都可以使用declared_paramshttps://github.com/ruby-grape/grape#declared

    【讨论】:

      【解决方案2】:

      假设您正在使用 rails...

      您可以在您的 api 的基类中创建一个强大的参数助手,这样您的挂载端点也可以拥有这个助手:

      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
      

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        从 Rack::Utils.parse_nested_query 开始可能更容易

        例如:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-16
          • 2010-09-16
          • 2023-04-09
          • 2016-02-14
          • 2019-08-03
          • 1970-01-01
          • 2017-01-08
          • 2017-05-25
          相关资源
          最近更新 更多