mermade/openapi3-examples
PHP package for working with OpenAPI 3 example objects: generate, load and manage request/response examples, helping you enrich specs and keep sample payloads in sync during API development, docs and testing workflows.
Installation
composer require --dev mermade/openapi3-examples
Add to composer.json under require-dev if not using globally.
Locate Examples The package provides test cases in:
vendor/mermade/openapi3-examples/src/Examples/ (for valid/invalid OpenAPI specs)vendor/mermade/openapi3-examples/tests/ (for validator test cases)First Use Case: Validating a Spec
Use with a validator like zircote/swagger-php:
use Mermade\OpenApi3Examples\Examples\ValidSpecs;
use Zircote\Swagger\Validator;
$validator = new Validator();
$spec = ValidSpecs::getPetstoreSpec(); // Example valid spec
$validation = $validator->validate($spec);
Unit Testing OpenAPI Use examples in PHPUnit tests:
use Mermade\OpenApi3Examples\Examples\InvalidSpecs;
public function testInvalidSpec()
{
$validator = new Validator();
$spec = InvalidSpecs::getMissingTitleSpec();
$this->assertFalse($validator->validate($spec)->isValid());
}
Integration with CI
Add to phpunit.xml:
<testsuites>
<testsuite name="OpenAPI Validation">
<directory>./tests/OpenApi</directory>
</testsuite>
</testsuites>
Dynamic Example Loading Load specs dynamically in Laravel:
use Mermade\OpenApi3Examples\Examples\ValidSpecs;
$specs = collect(ValidSpecs::getAllValidSpecs())
->map(fn ($spec) => json_encode($spec, JSON_PRETTY_PRINT));
Zircote\Swagger\Validator and use examples to test edge cases.Version Mismatch
The package uses OpenAPI 3.x. Ensure your validator (e.g., zircote/swagger-php) supports 3.x:
composer require zircote/swagger-php:^7.0
False Positives/Negatives Some examples may trigger validator quirks. Cross-check with Swagger’s validator.
Namespace Conflicts
Avoid naming collisions with Mermade\OpenApi3Examples in your project.
$validation = $validator->validate($spec);
foreach ($validation->errors() as $error) {
logger()->error($error->getMessage());
}
Add Custom Examples Extend the package by creating a new class:
namespace App\OpenApiExamples;
use Mermade\OpenApi3Examples\Examples\BaseSpecs;
class CustomSpecs extends BaseSpecs {
public static function getCustomSpec() { ... }
}
Mock API Responses Use examples to mock responses in Laravel tests:
$response = json_decode(file_get_contents(
__DIR__ . '/../../vendor/mermade/openapi3-examples/src/Examples/ValidSpecs/petstore.json'
));
Laravel Service Provider Register examples as a singleton for global access:
$this->app->singleton('openapi-examples', fn () => new ValidSpecs());
How can I help you explore Laravel packages today?