您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

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

2024/4/18 9:14:31发布8次查看
现在在开发一个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; }}?>
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录