PHPackages                             ybelenko/openapi-data-mocker-server-middleware - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. ybelenko/openapi-data-mocker-server-middleware

ActiveLibrary[Testing &amp; Quality](/categories/testing)

ybelenko/openapi-data-mocker-server-middleware
==============================================

PSR-15 HTTP Server Middleware to create mock responses from OpenAPI Schemas(OAS 3.0).

1.2.0(4y ago)129.5k↓22.6%2MITPHPPHP ^7.3 || ^8.0

Since Jun 8Pushed 4y ago1 watchersCompare

[ Source](https://github.com/ybelenko/openapi-data-mocker-server-middleware)[ Packagist](https://packagist.org/packages/ybelenko/openapi-data-mocker-server-middleware)[ RSS](/packages/ybelenko-openapi-data-mocker-server-middleware/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (7)Versions (9)Used By (0)

Openapi Data Mocker Server Middleware
=====================================

[](#openapi-data-mocker-server-middleware)

[![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)

[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.

Requirements
------------

[](#requirements)

- PHP ^7.3

**Important notice! While PHP 8.0 declared in composer.json this package hasn't been tested against it.**

Installation via Composer
-------------------------

[](#installation-via-composer)

Run in terminal:

```
composer require ybelenko/openapi-data-mocker-server-middleware
```

Constructor Arguments
---------------------

[](#constructor-arguments)

1. `$mocker: OpenApiDataMockerInterface`
    - is mocker class instance. To create custom data mocker extend `OpenAPIServer\Mock\OpenApiDataMockerInterface`.
2. `$responses: array`
    - Array with OAS3 response definitions of applied route. Check [examples/get\_mock\_responses.php](examples/get_mock_responses.php) file.
3. `$responseFactory: ResponseFactoryInterface`
    - Any PSR-17 compliant response factory. [PSR-17: HTTP Factories - 2.2 ResponseFactoryInterface](https://www.php-fig.org/psr/psr-17/#22-responsefactoryinterface)
4. `$getMockStatusCodeCallback: callable|null = null`
    - 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`.**
5. `$afterCallback: callable|null = null`
    - 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.**

Usage Example
-------------

[](#usage-example)

```
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://www.slimframework.com/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 http://localhost:8888/mock
// Hello

// $ curl http://localhost:8888/mock -H 'X-OpenAPIServer-Mock: ping'
```

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity31

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 97.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~166 days

Total

5

Last Release

1505d ago

Major Versions

0.0.1 → 1.0.02020-06-19

PHP version history (3 changes)0.0.1PHP ^7.1

1.0.0PHP ^7.2

1.1.0PHP ^7.3 || ^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/bc88fb16ce6ab53268f3ea38dec05691aa20360ab4dc91f3ddab815e7625545a?d=identicon)[ybelenko](/maintainers/ybelenko)

---

Top Contributors

[![ybelenko](https://avatars.githubusercontent.com/u/5541023?v=4)](https://github.com/ybelenko "ybelenko (33 commits)")[![anttikuuskoski](https://avatars.githubusercontent.com/u/20336930?v=4)](https://github.com/anttikuuskoski "anttikuuskoski (1 commits)")

---

Tags

datafakefakermiddlewaremockmockeroasoas3openapipsr-15swaggermiddlewarefakerdataswaggeropenapimockpsr-15fakemocker

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/ybelenko-openapi-data-mocker-server-middleware/health.svg)

```
[![Health](https://phpackages.com/badges/ybelenko-openapi-data-mocker-server-middleware/health.svg)](https://phpackages.com/packages/ybelenko-openapi-data-mocker-server-middleware)
```

###  Alternatives

[phpspec/prophecy

Highly opinionated mocking framework for PHP 5.3+

8.5k551.7M682](/packages/phpspec-prophecy)[ybelenko/openapi-data-mocker

Library that generates fake data from Swagger 2.0|Openapi 3.0 spec

1230.5k1](/packages/ybelenko-openapi-data-mocker)[nelmio/alice

Expressive fixtures generator

2.5k43.4M133](/packages/nelmio-alice)[fakerino/fakerino

Faker framework, for generate every kind of fake data for test, database seed, mock responses, other

12214.8k5](/packages/fakerino-fakerino)[sunrise/http-router

A powerful solution as the foundation of your project.

16249.8k10](/packages/sunrise-http-router)[icecave/isolator

Dependency injection for global functions.

371.3M29](/packages/icecave-isolator)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
