加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails中的REST API参数验证

发布时间:2020-12-17 02:39:09 所属栏目:百科 来源:网络整理
导读:我正在编写一个仅具有REST API的Rails应用程序(没有Web界面等).我需要检查是否使用正确的参数进行请求,如果没有则返回不同的错误代码.例如,我的所有API端点都需要user_access_token和client_id.一些其他端点需要存在其他不同的参数. 在所有控制器中,我都有执
我正在编写一个仅具有REST API的Rails应用程序(没有Web界面等).我需要检查是否使用正确的参数进行请求,如果没有则返回不同的错误代码.例如,我的所有API端点都需要user_access_token和client_id.一些其他端点需要存在其他不同的参数.

在所有控制器中,我都有执行此检查的代码,但代码重复,并且有许多if条件可以提取出来放在其他地方.所以我想在我的ApplicationController中添加一个before_filter来执行此检查.我定义了一个包含所有端点到required_pa??rams映射的哈希,并且该过滤器在控件传递给相关的实际控制器之前运行.

但是对于某些端点来说,它有点复杂,因为如果存在一些其他参数则需要一些参数,并且在某些情况下需要两个参数中的一个.所以现在我想知道是否有更好的方法来做到这一点.

我做得对吗?这样做有更好/标准化的方法吗?或者一些宝石这样做?

解决方法

我必须看到一些代码来理解上下文.但它本质上听起来像你有你的基本ApplicationController所有其他控制器继承.变化的是您期望的参数(除了总是需要提供的user_access_token和client_id之外).由于您正在使用继承,您可以在ApplicationController中定义一个方法,该方法包含您期望的参数列表,然后在子类中覆盖检查添加其他参数的方法.您的基本控制器将负责进行实际验证,但子类将有机会覆盖所需的参数.

class ApplicationController < ActionController::Base
  before_filter :validate_params

  protected

  def required_params
    [:user_access_token,:client_id]
  end

  def validate_params
    unless (require_params - params.keys).count.zero?
      # do something
    end
  end
end

class AnotherController < ApplicationController
  protected

  def required_params
    p = super + [:email,:password]
    p = p + [:another,:and_another] if some_condition?
    p
  end
end

基本上你会让子类决定是否需要添加任何额外的必需参数.当然我不知道你的确切背景是什么,但希望这会帮助你朝着正确的方向前进.当你有机会做一些关于多态的研究:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读