PSR-15 Middleware that simulates the API responses using an OpenAPI schema.
Define requests/responses using the OpenAPI schema and this data is immediately available, so development/testing against this API can begin even though the functionality has not yet been implemented.
- PHP >= 8.0
- PSR-17 HTTP factories implementation
- PSR-15 HTTP server middleware dispatcher
- PSR-6 Caching interface implementation (optional)
You can install the package via composer:
composer require cschindl/php-openapi-mock-middlewareTo see how to use and extend OpenApiMockMiddleware, have a look at our example project.
First you need to create an instance of OpenApiMockMiddleware with your schema that you want to fake data from. You can use createFromYamlFile, createFromJsonFile, createFromYaml or createFromJson to create an instance of OpenApiMockMiddleware.
use Cschindl\OpenApiMockMiddleware\OpenApiMockMiddlewareConfig;
use Cschindl\OpenApiMockMiddleware\OpenApiMockMiddlewareFactory;
use Psr\Cache\CacheItemPoolInterface;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseFactoryInterface;
use Psr\Http\Message\StreamFactoryInterface;
/** @var ContainerInterface $container */
$container = require _DIR__ . '/config/container.php';
/** @var ResponseFactoryInterface $responseFactory */
$responseFactory = $container->get(ResponseFactoryInterface::class);
/** @var StreamFactoryInterface $responseFactory */
$streamFactory = $container->get(StreamFactoryInterface::class);
/** @var CacheItemPoolInterface|null $cache */
$cache = $container->get(CacheItemPoolInterface::class);
$pathToOpenApiFile = _DIR__ . '/data/openapi.yaml';
$config = new OpenApiMockMiddlewareConfig();
$openApiMockMiddleware = OpenApiMockMiddlewareFactory::createFromYamlFile(
$pathToOpenApiFile,
$config,
$responseFactory,
$streamFactory,
$cache
);After that, register the middleware.
use Cschindl\OpenApiMockMiddleware\OpenApiMockMiddleware;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
$app = new MiddlewareRunner();
$app->add($openApiMockMiddleware);
// To enable the middleware, add this header to your requests
// If this header is not present in the request, the middleware will skip to the next handler
$prepareOpenApiMiddleware = function (
ServerRequestInterface $request,
RequestHandlerInterface $handler
) {
return $handler->handle(
$request->withAddedHeader(
OpenApiMockMiddleware::HEADER_OPENAPI_MOCK_ACTIVE,
'true'
)
);
);
// Make sure that this middleware is called before $openApiMockMiddleware
$app->add($prepareOpenApiMiddleware);
$app->run($request, $response);There are some options you can use to modify some behaviour.
$settings = [
'validateRequest' => true,
'validateResponse' => true,
'faker' => [
'minItems' => 1,
'maxItems' => 10,
'alwaysFakeOptionals' => false,
'strategy' => Options::STRATEGY_STATIC,
],
];
// @see https://github.com/canvural/php-openapi-faker#options
$fakerOptions = (new Options())
->setMinItems($settings['faker']['minItems'])
->setMaxItems($settings['faker']['maxItems'])
->setAlwaysFakeOptionals($settings['faker']['alwaysFakeOptionals'])
->setStrategy($settings['faker']['strategy']);
$config = new OpenApiMockMiddlewareConfig(
$settings['validateRequest'],
$settings['validateResponse'],
$fakerOptions
);Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
People:
Resources:
The MIT License (MIT). Please see License File for more information.