ybelenko / openapi-data-mocker-server-middleware
PSR-15 HTTP 服务器中间件,用于从 OpenAPI 规范(OAS 3.0)创建模拟响应。
1.2.0
2022-04-05 02:02 UTC
Requires
- php: ^7.3 || ^8.0
- psr/http-factory: ^1.0
- psr/http-server-middleware: ^1.0
- ybelenko/openapi-data-mocker-interfaces: ^1.0.0
Requires (Dev)
- nyholm/psr7: ^1.0
- phpunit/phpunit: ^8.0 || ^9.0
- squizlabs/php_codesniffer: ^3.5
- ybelenko/openapi-data-mocker: ^1.0.0
This package is auto-updated.
Last update: 2024-09-05 07:05:45 UTC
README
PSR-15 HTTP 服务器中间件,用于从 OpenAPI 规范(OAS 3.0)创建模拟响应。此软件包是 OpenAPI Generator 项目的 PHP Slim4 服务器增强版本,但更容易在独立的存储库中维护。
要求
- PHP ^7.3
重要通知!尽管在 composer.json 中声明了 PHP 8.0,但此软件包尚未针对它进行测试。
通过 Composer 安装
在终端运行
composer require ybelenko/openapi-data-mocker-server-middleware
构造函数参数
$mocker: OpenApiDataMockerInterface- 是模拟类实例。要创建自定义数据模拟器,请扩展
OpenAPIServer\Mock\OpenApiDataMockerInterface。
- 是模拟类实例。要创建自定义数据模拟器,请扩展
$responses: array- 包含应用路由的 OAS3 响应定义的数组。请查看 examples/get_mock_responses.php 文件。
$responseFactory: ResponseFactoryInterface- 任何符合 PSR-17 规范的响应工厂。 PSR-17: HTTP Factories - 2.2 ResponseFactoryInterface
$getMockStatusCodeCallback: callable|null = null- 是在生成模拟数据之前调用的回调。以下示例显示了如何仅对具有
X-OpenAPIServer-Mock: pingHTTP 头的请求启用模拟功能。调整请求筛选以符合项目要求。此函数必须从$responses参数数组中返回单个响应模式。 当回调返回除了$responses数组中现有键之外的任何内容时,模拟功能将被禁用,例如'default'或200。
- 是在生成模拟数据之前调用的回调。以下示例显示了如何仅对具有
$afterCallback: callable|null = null- 是在生成模拟数据之后执行的回调。最明显的用例是为真实和模拟响应添加特定的 HTTP 头以区分它们。 此函数必须始终返回响应实例。
使用示例
require_once __DIR__ . '/vendor/autoload.php'; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; use Slim\Factory\AppFactory; use Slim\Factory\ServerRequestCreatorFactory; use OpenAPIServer\Mock\OpenApiDataMockerRouteMiddleware; use OpenAPIServer\Mock\OpenApiDataMocker; // initiate Slim app or any other PSR-15 compliant framework $app = AppFactory::create(); // create new mocker instance $mocker = new OpenApiDataMocker(); // responses OAS3.0 definition of GET /mock operation // check examples/get_mock_responses.php file $responsesForGetMockRoute = require_once(__DIR__ . '/get_mock_responses.php'); // initiate any PSR-17 compliant response factory $responseFactory = AppFactory::determineResponseFactory(); // optional response schema selector $getMockStatusCodeCallback = function (ServerRequestInterface $request, $responses) { // check if client clearly asks for mocked response if ( $request->hasHeader('X-OpenAPIServer-Mock') && $request->getHeader('X-OpenAPIServer-Mock')[0] === 'ping' ) { $responses = (array) $responses; if (array_key_exists('default', $responses)) { return 'default'; } // return first response key reset($responses); return key($responses); } return false; }; // optional after middleware callback $afterCallback = function (ServerRequestInterface $request, ResponseInterface $response) { // mark mocked response to distinguish real and fake responses return $response->withHeader('X-OpenAPIServer-Mock', 'pong'); }; // create middleware itself $mw = new OpenApiDataMockerRouteMiddleware( $mocker, $responsesForGetMockRoute, $responseFactory, $getMockStatusCodeCallback, $afterCallback ); // this package is route middleware, apply it to route as described in Slim docs: // https://slim.php.ac.cn/docs/v4/concepts/middleware.html#route-middleware $app->get('/mock', function (ServerRequestInterface $request, ResponseInterface $response) { $response->getBody()->write('Hello '); return $response; })->add($mw); $app->run(); // let's assume you started builtin PHP server // which you MUST NOT use on production: // $ php -S localhost:8888 examples/slim_example.php // finally you can check output with curl library // $ curl https://:8888/mock // Hello // $ curl https://:8888/mock -H 'X-OpenAPIServer-Mock: ping'