欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

基于JSON类型返回的API接口如果做输出校验?

程序员文章站 2024-01-09 19:13:16
...
现在在开发一个api接口,返回数据是json格式的,前端输入有validator校验器可以校验数据是否合法,那后台输出的返回呢?只能用phpunit的单元测试方法测试字段是否完全返回吗?有没有什么比较简单的输出校验框架可以用

回复内容:

现在在开发一个api接口,返回数据是json格式的,前端输入有validator校验器可以校验数据是否合法,那后台输出的返回呢?只能用phpunit的单元测试方法测试字段是否完全返回吗?有没有什么比较简单的输出校验框架可以用

后台写一个验证类吧。

给你一个做参考

'/^([.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\\.[a-zA-Z0-9_-])+/',
        "phone"=>'/^(([0-9]{2,3})|([0-9]{3}-))?((0[0-9]{2,3})|0[0-9]{2,3}-)?[1-9][0-9]{6,7}(-[0-9]{1,4})?$/',
        "mobile"=>'/^1[0-9]{10}$/',
        "url"=>'/^http:(\\/){2}[A-Za-z0-9]+.[A-Za-z0-9]+[\\/=?%-&_~`@\\[\\]\':+!]*([^\"\"])*$/',
        "currency"=>'/^[0-9]+(\\.[0-9]+)?$/',
        "number"=>'/^[0-9]+$/',
        "zip"=>'/^[0-9][0-9]{5}$/',
        "qq"=>'/^[1-9][0-9]{4,8}$/',
        "integer"=>'/^[-+]?[0-9]+$/',
        "integerpositive"=>'/^[+]?[0-9]+$/',
        "double"=>'/^[-+]?[0-9]+(\\.[0-9]+)?$/',
        "doublepositive"=>'/^[+]?[0-9]+(\\.[0-9]+)?$/',
        "english"=>'/^[A-Za-z]+$/',
        "chinese"=>'/^[\x80-\xff]+$/',
        "username"=>'/^[\\w]{3,}$/',
        "nochinese"=>'/^[A-Za-z0-9_-]+$/',
    );

    /**
     * 验证数组中的值
     *
     * 
     * //使用示例
     * setValidate("344d",true,"","不可以为空");
     *    $a->setValidate("fdsfsfd",true,"Email","请填写正确的EMAIL");
     *    echo $a->validate();
     *
     *  //显示结果:
     *  请填写正确的EMAIL
     * ? >
     * 
     * 
     * @param 
     * @return string 字符串类型的返回结果
     */
    public function validate(){
        if (!is_array($this->validateparam)){
            return false;
        }
        foreach($this->validateparam as $k=>$v){
            $v['validator'] = strtolower($v['validator']);
            if ($v['require'] == ""){
                $v['require'] = false;
            }

            if ($v['input'] == "" && $v['require'] == "true"){                
                $this->validateparam[$k]['result'] = false;
            }else{
                $this->validateparam[$k]['result'] = true;
            }
            if ($this->validateparam[$k]['result'] && $v['input'] != ""){
                switch($v['validator']){
                    case "custom":
                        $this->validateparam[$k]['result'] = $this->check($v['input'],$v['regexp']);
                        break;
                    case "compare":
                        if ($v['operator'] != ""){
                            eval("\$result = '" . $v['input'] . "'" . $v['operator'] . "'" . $v['to'] . "'" . ";" );
                            $this->validateparam[$k]['result'] = $result;    
                        }
                        break;
                    case "length":
                        //判断编码取字符串长度
                        $input_encode = mb_detect_encoding($v['input'],array('UTF-8','GBK','ASCII',));
                        $input_length = mb_strlen($v['input'],$input_encode);
                        if (intval($v['min']) >= 0 && intval($v['max']) > intval($v['min'])){
                            $this->validateparam[$k]['result'] = ($input_length >= intval($v['min']) && $input_length = 0 && intval($v['max']) validateparam[$k]['result'] = ($input_length == intval($v['min']));
                        }
                        break;

                    case "range":
                        if (intval($v['min']) >= 0 && intval($v['max']) > intval($v['min'])){
                            $this->validateparam[$k]['result'] = (intval($v['input']) >= intval($v['min']) && intval($v['input']) = 0 && intval($v['max']) validateparam[$k]['result'] = (intval($v['input']) == intval($v['min']));
                        }
                        break;
                    default:
                        $this->validateparam[$k]['result'] = $this->check($v['input'],$this->validator[$v['validator']]);
                }
            }
        }
        $error = $this->getError();
        $this->validateparam = array();
        return $error;
    }

    /**
     * 正则表达式运算
     *
     * @param string $str 验证字符串
     * @param string $validator 验证规则
     * @return bool 布尔类型的返回结果
     */
    private function check($str='',$validator=''){
        if ($str != "" && $validator != ""){
            if (preg_match($validator,$str)){
                return true;
            }
            else{
                return false;
            }
        }
        return true;
    }
    
    /**
     * 需要验证的内容
     *
     * @param array $validateparam array("input"=>"","require"=>"","validator"=>"","regexp"=>"","operator"=>"","to"=>"","min"=>"","max"=>"",message=>"")
     * input要验证的值
     * require是否必填,true是必填false是可选
     * validator验证的类型:
     * 其中Compare,Custom,Length,Range比较特殊。
     * Compare是用来比较2个字符串或数字,operator和to用来配合使用,operator是比较的操作符(==,>,=,validateparam = array_merge($this->validateparam,array($validateparam));
    }

    /**
     * 得到验证的错误信息
     *
     * @param 
     * @return string 字符串类型的返回结果
     */
    private function getError(){
        foreach($this->validateparam as $k=>$v){
            if ($v['result'] == false){
                return $v['message'];
            }
        }
        return null;
    }
}
?>