{"id":14986714,"url":"https://github.com/ybelenko/openapi-data-mocker-server-middleware","last_synced_at":"2025-06-15T04:06:27.897Z","repository":{"id":53671798,"uuid":"254380472","full_name":"ybelenko/openapi-data-mocker-server-middleware","owner":"ybelenko","description":"PSR-15 HTTP Server Middleware to create mock responses from OpenAPI Schemas(OAS 3.0).","archived":false,"fork":false,"pushed_at":"2022-04-05T02:08:37.000Z","size":46,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-28T02:48:14.213Z","etag":null,"topics":["data","fake","faker","middleware","mock","mocker","oas","oas3","openapi","psr-15","swagger"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ybelenko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-09T13:35:10.000Z","updated_at":"2024-05-08T10:09:02.000Z","dependencies_parsed_at":"2022-08-24T22:50:55.607Z","dependency_job_id":null,"html_url":"https://github.com/ybelenko/openapi-data-mocker-server-middleware","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/ybelenko/openapi-data-mocker-server-middleware","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ybelenko%2Fopenapi-data-mocker-server-middleware","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ybelenko%2Fopenapi-data-mocker-server-middleware/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ybelenko%2Fopenapi-data-mocker-server-middleware/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ybelenko%2Fopenapi-data-mocker-server-middleware/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ybelenko","download_url":"https://codeload.github.com/ybelenko/openapi-data-mocker-server-middleware/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ybelenko%2Fopenapi-data-mocker-server-middleware/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259919455,"owners_count":22932071,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data","fake","faker","middleware","mock","mocker","oas","oas3","openapi","psr-15","swagger"],"created_at":"2024-09-24T14:13:23.931Z","updated_at":"2025-06-15T04:06:27.880Z","avatar_url":"https://github.com/ybelenko.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Openapi Data Mocker Server Middleware\n\n[![Build Status](https://github.com/ybelenko/openapi-data-mocker-server-middleware/actions/workflows/ci.yml/badge.svg)](https://github.com/ybelenko/openapi-data-mocker-server-middleware/actions/workflows/ci.yml)\n\n[PSR-15](https://www.php-fig.org/psr/psr-15/) HTTP Server Middleware to create mock responses from [OpenAPI Schemas](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md)(OAS 3.0). This package was an enhancement of PHP Slim4 server in [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator) project, but it easier to maintain it in separated repo.\n\n## Requirements\n\n* PHP ^7.3\n\n__Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.__\n\n## Installation via Composer\n\nRun in terminal:\n\n```console\ncomposer require ybelenko/openapi-data-mocker-server-middleware\n```\n\n## Constructor Arguments\n\n1. `$mocker: OpenApiDataMockerInterface`\n    + is mocker class instance. To create custom data mocker extend `OpenAPIServer\\Mock\\OpenApiDataMockerInterface`.\n2. `$responses: array`\n    + Array with OAS3 response definitions of applied route. Check [examples/get_mock_responses.php](examples/get_mock_responses.php) file.\n3. `$responseFactory: ResponseFactoryInterface`\n    + Any PSR-17 compliant response factory. [PSR-17: HTTP Factories - 2.2 ResponseFactoryInterface](https://www.php-fig.org/psr/psr-17/#22-responsefactoryinterface)\n4. `$getMockStatusCodeCallback: callable|null = null`\n    + is callback before mock data generation. Below example shows how to enable mock feature for only requests with `X-OpenAPIServer-Mock: ping` HTTP header. Adjust requests filtering to fit your project requirements. This function must return single response schema from `$responses` array parameter. **Mock feature is disabled when callback returns anything beside existent key from `$responses` array, eg `'default'` or `200`.**\n5. `$afterCallback: callable|null = null`\n    + is callback executed after mock data generation. Most obvious use case is append specific HTTP headers to distinguish real and fake responses. **This function must always return response instance.**\n\n## Usage Example\n\n```php\nrequire_once __DIR__ . '/vendor/autoload.php';\n\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Slim\\Factory\\AppFactory;\nuse Slim\\Factory\\ServerRequestCreatorFactory;\nuse OpenAPIServer\\Mock\\OpenApiDataMockerRouteMiddleware;\nuse OpenAPIServer\\Mock\\OpenApiDataMocker;\n\n// initiate Slim app or any other PSR-15 compliant framework\n$app = AppFactory::create();\n\n// create new mocker instance\n$mocker = new OpenApiDataMocker();\n\n// responses OAS3.0 definition of GET /mock operation\n// check examples/get_mock_responses.php file\n$responsesForGetMockRoute = require_once(__DIR__ . '/get_mock_responses.php');\n\n// initiate any PSR-17 compliant response factory\n$responseFactory = AppFactory::determineResponseFactory();\n\n// optional response schema selector\n$getMockStatusCodeCallback = function (ServerRequestInterface $request, $responses) {\n    // check if client clearly asks for mocked response\n    if (\n        $request-\u003ehasHeader('X-OpenAPIServer-Mock')\n        \u0026\u0026 $request-\u003egetHeader('X-OpenAPIServer-Mock')[0] === 'ping'\n    ) {\n        $responses = (array) $responses;\n        if (array_key_exists('default', $responses)) {\n            return 'default';\n        }\n\n        // return first response key\n        reset($responses);\n        return key($responses);\n    }\n    return false;\n};\n\n// optional after middleware callback\n$afterCallback = function (ServerRequestInterface $request, ResponseInterface $response) {\n    // mark mocked response to distinguish real and fake responses\n    return $response-\u003ewithHeader('X-OpenAPIServer-Mock', 'pong');\n};\n\n// create middleware itself\n$mw = new OpenApiDataMockerRouteMiddleware(\n    $mocker,\n    $responsesForGetMockRoute,\n    $responseFactory,\n    $getMockStatusCodeCallback,\n    $afterCallback\n);\n\n// this package is route middleware, apply it to route as described in Slim docs:\n// https://www.slimframework.com/docs/v4/concepts/middleware.html#route-middleware\n$app-\u003eget('/mock', function (ServerRequestInterface $request, ResponseInterface $response) {\n    $response-\u003egetBody()-\u003ewrite('Hello ');\n\n    return $response;\n})-\u003eadd($mw);\n\n$app-\u003erun();\n\n// let's assume you started builtin PHP server\n// which you MUST NOT use on production:\n// $ php -S localhost:8888 examples/slim_example.php\n\n// finally you can check output with curl library\n// $ curl http://localhost:8888/mock\n// Hello\n\n// $ curl http://localhost:8888/mock -H 'X-OpenAPIServer-Mock: ping'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fybelenko%2Fopenapi-data-mocker-server-middleware","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fybelenko%2Fopenapi-data-mocker-server-middleware","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fybelenko%2Fopenapi-data-mocker-server-middleware/lists"}