Home >Backend Development >PHP Tutorial >基于JSON类型返回的API接口如果做输出校验?

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

WBOY
WBOYOriginal
2016-06-06 20:19:201131browse

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

回复内容:

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

后台写一个验证类吧。

给你一个做参考

<code><?php /**
 * 验证类
 * 
 * @package
 */
Class Validate{
    /**
     * 存放验证信息
     *
     * @var array
     */
    public $validateparam = array();
    /**
     * 验证规则
     *
     * @var array
     */
    private $validator = array(
        "email"=>'/^([.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_-]+$/',
    );

    /**
     * 验证数组中的值
     *
     * <code>
     * //使用示例
     * <?php *  require("commonvalidate.class.php");
     *    $a = new CommonValidate();
     *    $a->setValidate("344d",true,"","不可以为空");
     *    $a->setValidate("fdsfsfd",true,"Email","请填写正确的EMAIL");
     *    echo $a->validate();
     *
     *  //显示结果:
     *  请填写正确的EMAIL
     * ? >
     * </code>
     * 
     * @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;
    }
}
?>
</code>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn