n1215/openapi-http-foundation-validator

0.2.0 2023-09-22 12:51 UTC

This package is auto-updated.

Last update: 2024-09-22 15:11:09 UTC


README

为 Symfony http-foundation 开发的 OpenAPI(v3) 验证器,使用 league/openapi-psr7-validatorsymfony/psr-http-message-bridge

要求

  • PHP >= 8.1

安装

composer require n1215/openapi-http-foundation-validator

使用方法

1. 安装 PSR-17 HTTP 工厂实现。

  • 您可以使用任何 PSR-17 HTTP 工厂实现。
    • 例如:nyholm/psr7
composer require nyholm/psr7

2. 创建 http 消息工厂

$psr17Factory = new \Nyholm\Psr7\Factory\Psr17Factory();
/** @var \Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface $httpMessageFactory */
$httpMessageFactory = new \Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory(
    serverRequestFactory: $psr17Factory,
    streamFactory: $psr17Factory,
    uploadedFileFactory: $psr17Factory,
    responseFactory: $psr17Factory
);

3. 创建验证器构建器

  • 构建器可以从 YAML 文件、YAML 字符串、JSON 文件或 JSON 字符串创建。
  • 您可以使用 PSR-16 简单缓存代替 PSR-6 缓存。

示例1

/** @var \N1215\OpenApiValidation\HttpFoundation\ValidatorBuilder $validatorBuilder */
$validatorBuilder = (new \N1215\OpenApiValidation\HttpFoundation\ValidatorBuilder($psr17Factory))
    ->fromYamlFile('/path/to/openapi.yaml')
    ->setCache(new YourPsr6Cache(), 86400);

示例2

/** @var \N1215\OpenApiValidation\HttpFoundation\ValidatorBuilder $validatorBuilder */
$validatorBuilder = (new \N1215\OpenApiValidation\HttpFoundation\ValidatorBuilder($psr17Factory))
    ->fromJsonFile('/path/to/openapi.json')
    ->setSimpleCache(new YourPsr16Cache(), 3600);

4. 从构建器获取验证器

/** @var \N1215\OpenApiValidation\HttpFoundation\Validators $validators */
$validators = $validatorBuilder->getValidators();

5. 验证请求

/** @var \Symfony\Component\HttpFoundation\Request $request */
/** @var \N1215\OpenApiValidation\HttpFoundation\RequestValidatorInterface $requestValidator */
$requestValidator = $validators->getRequestValidator();
$requestValidator->validate($request);

6. 验证响应

/** @var \Symfony\Component\HttpFoundation\Response $response */
/** @var \N1215\OpenApiValidation\HttpFoundation\ResponseValidatorInterface $responseValidator */
$responseValidator = $validators->getResponseValidator();
$responseValidator->validate(
    new \N1215\OpenApiValidation\OperationAddress('/path', 'GET'),
    $response
);

Laravel 使用方法

https://github.com/n1215/openapi-laravel-validator