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 基本上你会让子类决定是否需要添加任何额外的必需参数.当然我不知道你的确切背景是什么,但希望这会帮助你朝着正确的方向前进.当你有机会做一些关于多态的研究:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |