该包最新版本(dev-master)没有可用的许可证信息。

架构师是一个轻量级的数据验证、数据清理和API文档生成库。

dev-master 2024-09-25 14:38 UTC

This package is auto-updated.

Last update: 2024-09-25 14:39:04 UTC


README

架构师是一个轻量级的数据验证、数据清理和API文档生成库。

  • 数据验证
  • 数据清理
  • JSON Schema构建器
  • OpenApi构建器
  • Swagger构建器

数据验证

定义模式

$schema = new Schema();
$schema->prop('firstname')->string()->minLength(1)->maxLength(100)->required();
$schema->prop('surname')->string()->minLength(1)->maxLength(100)->required();
$schema->prop('sex')->enum(['MALE', 'FEMALE'])->required();

// OR

#[RequiredAll]
class Author
{
    public function __construct(
        #[RangeLength(1, 100)] public string $firstname,
        #[RangeLength(1, 100)] public string $surname,
        #[Enum(['MALE', 'FEMALE'])] public string $sex,
    ) {
    }
}

数据验证

$payload = [
    'firstname' => 'Dave',
    'surname' => 'Lister',
    'sex' => 'MALE',
];

try {
    (new ArrayValidator())->validate($schema, $payload);
    // OR
    (new ArrayValidator())->validate((new SchemaBuilder())->build(Author::class), $payload);
} catch (ValidationFailedException $e) {
    var_dump(MessageFormatter::toFlatten($e->getErrors()));
}

条件验证

$payload = [
    'firstname' => 'Dave',
    'surname' => 'Lister',    
];

$conditions = new ArraySchemaConditions();
$conditions->props('firstname', 'surname')->filledAllOrNone();

try {
    $conditions->validate($payload);
} catch (ValidationFailedException $e) {
    var_dump(MessageFormatter::toFlatten($e->getErrors()));
}

数据清理

$payload = [
    'firstname' => '  Dave  ',
    'surname' => 'Lister ',
];

$sanitizer = new ArrayDataSanitizer();
$sanitizer->props('firstname', 'surname')->trim();
$sanitizer->props('sex')->defaultIfNotExists('MALE');

$sanitizedPayload = $sanitizer->sanitize($payload);

JSON Schema构建器

$builder = new JsonSchemaBuilder();
$builder->buildToJson($schema); // return JSON Schema specification

OpenApi构建器

$api = new Api();
$api->info()->title('Example documentation');
$api->info()->description((string) file_get_contents(__DIR__ . '/description.md'));
$api->info()->version('1.0.0');

Partition::apply($api, Partition::create(static function (Api $api): void {
    $ep = $api->get('/book-store/manage/attribute/list');
    $ep->tags('BookStore', 'BookStore - Manage');
    $ep->headerParam('x-api-key', true)->description('User api key');
    $ep->queryParam('limit');
    $ep->queryParam('offset');
    $ep->jsonResponse200Ok(Attributes::class);
    $ep->jsonResponse401AuthorizationRequired(Problem::class);
    $ep->response500InternalServerError();
}));

$builder = new OpenApiBuilder(new JsonSchemaBuilder());
$generator->build($api); // return OpenApi specification

Swagger构建器

$swagger = new SwaggerBuilder();
echo $swagger->build($api, 'Bookstore API'); // return HTML Swagger documentation

Bookstore API documentation