rethink/json-validator

v0.1.0 2017-07-17 08:19 UTC

This package is auto-updated.

Last update: 2024-09-05 01:30:11 UTC


README

一个设计得既优雅又易于使用的JSON验证器。

动机

JSON验证是自动化API测试中的常见任务,JSON-Schema复杂且不易使用,因此我创建了此库以简化JSON验证过程,并使JSON验证更加优雅和有趣。

功能

  • JSON Schema验证,适用于自动化API测试
  • 支持自定义类型,您可以在任何地方定义并重用自定义类型
  • 支持空类型
  • 更多功能即将推出...

安装

您可以使用以下命令安装最新版本的JSON验证器:

composer require  rethink/json-validator:dev-master 

文档

类型

默认情况下,JSON验证器附带七种内置类型

  • 整数
  • 双精度浮点数
  • 布尔值
  • 字符串
  • 数字
  • 数组
  • 对象

除了内置类型外,您还可以通过defineType()方法定义自定义类型。

以下代码片段展示了如何通过数组或可调用定义自定义类型。

1. 定义复合类型

$validator->defineType('User', [
    'name' => 'string',
    'gender' => 'string',
    'age' => '?integer',
    'rating' => '?integer|boolean',
]);

此示例定义了一个名为User的自定义类型,它有四个属性。name和gender必须是字符串,age必须是整数但允许为空,rating必须为整数或布尔值且允许为空。

2. 定义列表类型

$validator->defineType('UserCollection', ['User']);

此定义UserCollectionUser的数组。为了定义列表类型,类型的定义中必须只包含一个元素。

3. 在可调用中定义类型

$validator->defineType('timestamp', function ($value) {
    if ((!is_string($value) && !is_numeric($value)) || strtotime($value) === false) {
        return false;
    }

    $date = date_parse($value);

    return checkdate($date['month'], $date['day'], $date['year']);
});

您还可以使用可调用来定义类型,这在执行数据验证时非常有用。例如,上面的示例定义了一个时间戳类型,要求数据为有效的日期时间。

验证类型

我们可以通过以下两个步骤来验证类型:

1. 创建验证器实例

use rethink\jsv\Validator;

$validator = new Validator();
// $validator->defineType(...)  Add your custom type if necessary

2. 执行验证

$matched = $validator->matches($data, 'User');
if ($matched) {
    // Validation passed
} else {
    $errors = $validator->getErrors();
}

此示例将检查给定的$data是否与类型User匹配,如果验证失败,我们可以通过getErrors()方法获取错误消息。

严格模式

在某些情况下,我们可能希望对象严格匹配我们的类型,我们可以利用严格模式来实现这一点,以下是一个示例

$data = [
    'name' => 'Bob',
    'gender' => 'Male',
    'age' => 19,
    'phone' => null, // This property is unnecessary
];
$matched = $validator->matches($data, 'User', true); // strict mode is turned on
var_dump($matched); // false is returned

相关项目

  • Blink Framework - 一个高性能的PHP Web框架和应用服务器。编辑