Rah*_*sal 4 ruby api validation rest ruby-on-rails
我正在编写一个仅具有REST API的Rails应用程序(没有Web界面等).我需要检查是否使用正确的参数进行请求,如果没有则返回不同的错误代码.例如,我的所有API端点都需要user_access_token和client_id.一些其他端点需要存在其他不同的参数.
在所有控制器中,我都有执行此检查的代码,但代码正在重复,并且有许多if条件可以提取出来放在其他地方.所以我想before_filter在我的中添加一个ApplicationController检查.我定义了一个包含所有端点到required_params映射的哈希,并且该过滤器在控件传递给相关的实际控制器之前运行.
但是对于某些端点来说,它有点复杂,因为如果存在其他一些参数则需要一些参数,并且在某些情况下需要两个参数中的一个.所以现在我想知道是否有更好的方法来做到这一点.
我做得对吗?这样做有更好/标准化的方法吗?或者一些宝石这样做?
我必须看到一些代码来理解上下文.但它本质上听起来像你有你的基本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
Run Code Online (Sandbox Code Playgroud)
基本上你会让子类决定是否需要添加任何额外的必需参数.当然我不知道你的确切背景是什么,但希望这会帮助你朝着正确的方向前进.当你有机会做一些关于多态的研究:-)
| 归档时间: |
|
| 查看次数: |
5191 次 |
| 最近记录: |