Validate HttpFoundation requests and responses against OpenAPI (3.0.x) definitions
Validate HttpFoundation requests and responses against OpenAPI (3.0.x) definitions.
⚠️ This package is still under active development. While you can safely use it for your projects, as long as version
1.0 has not been released "minor" version patches can and will contain breaking changes. Make sure to check the release section before you upgrade.
OpenAPI is a specification intended to describe RESTful APIs in a way that is understood by humans and machines alike.
By validating an API's requests and responses against the OpenAPI definition that describes it, we guarantee that the API is used correctly and behaves in accordance with the documentation we provide, thus making the OpenAPI definition the single source of truth.
The HttpFoundation component is developed and maintained as part of the Symfony framework. It is used to handle HTTP requests and responses in projects such as Symfony, Laravel, Drupal, and many others.
It converts HttpFoundation request and response objects to PSR-7 messages using Symfony's PSR-7 Bridge and Tobias Nyholm's PSR-7 implementation, before passing them on to OpenAPI PSR-7 Message Validator.
$ composer require --dev osteel/openapi-httpfoundation-testing
💡 This package is mostly intended to be used as part of an API test suite.
Import the builder class:
Use the builder to create a
\Osteel\OpenApi\Testing\Validator object, feeding it a YAML or JSON OpenAPI definition:
$validator = ValidatorBuilder::fromYaml('my-definition.yaml')->getValidator(); // or $validator = ValidatorBuilder::fromJson('my-definition.json')->getValidator();
💡 Instead of a file, you can also pass a YAML or JSON string directly.
You can now validate
\Symfony\Component\HttpFoundation\Response objects for a given path and method:
$validator->validate($response, '/users', 'post');
💡 For convenience, objects implementing
\Psr\Http\Message\ResponseInterface are also accepted.
In the example above, we check that the response matches the OpenAPI definition for a
POST request on the
Each of OpenAPI's supported HTTP methods (
TRACE) also has a shortcut method that calls
validate under the hood, meaning the line above could also be written this way:
Validating a request object works exactly the same way:
In the example above, we check that the request matches the OpenAPI definition for a
POST request on the
validate method returns
true in case of success, and throws
\Osteel\OpenApi\Testing\Exceptions\ValidationException exceptions in case of error.
Please see the Releases section for more information on what has changed recently.
$ composer test
Special thanks to Pavel Batanov for his advice on structuring the package.
The MIT License (MIT). Please see License File for more information.