membrane / openapi-router
0.5.3
2026-05-21 13:49 UTC
Requires
- php: ^8.4.0
- membrane/openapi-reader: ^3.0
- psr/http-message: ^1.1 || ^2.0
- psr/log: ^3.0.2
- symfony/console: ^7.4.11 || ^8.0.11
Requires (Dev)
- guzzlehttp/psr7: ^2.10.1
- infection/infection: ^0.33.2
- mikey179/vfsstream: ^1.6.12
- phpstan/phpstan: ^2.1.55
- phpunit/phpunit: ^13.1.11
- squizlabs/php_codesniffer: ^4.0.1
This package is auto-updated.
Last update: 2026-05-21 13:50:25 UTC
README
This library routes HTTP requests to operationIds in your OpenAPI specification. To make sure it runs quickly we've used techniques inspired by Nikita Popov and Nicolas Grekas.
Requirements
- A valid OpenAPI specification.
- An operationId on all Operation Objects so that each route is uniquely identifiable.
Rules
Naming Conventions
- Forward slashes at the end of a server url will be ignored since paths MUST begin with a forward slash.
- Dynamic paths which are identical other than the variable names MUST NOT exist.
Routing Priorities
- Static urls MUST be prioritized over dynamic urls.
- Longer urls are prioritized over shorter urls.
- Hosted servers will be prioritized over hostless servers.
Installation
composer require membrane/openapi-router
Quick Start
To read routes dynamically, you can do the following:
<?php use Membrane\OpenAPIRouter\Reader\OpenAPIFileReader;use Membrane\OpenAPIRouter\RouteCollector;use Membrane\OpenAPIRouter\Router; $openApi = (new OpenAPIFileReader())->readFromAbsoluteFilePath('/app/petstore.yaml'); $routeCollection = (new RouteCollector())->collect($openApi); $router = new Router($routeCollection); $requestedOperationId = $router->route('http://petstore.swagger.io/v1/pets', 'get'); echo $requestedOperationId; // listPets
Caching Routes
Run the following console command to cache the routes from your OpenAPI, to avoid reading your OpenAPI file everytime:
membrane:router:generate-routes <openapi-filepath> <destination-filepath>
<?php use Membrane\OpenAPIRouter\Router; $routeCollection = include '/app/cache/routes.php'; $router = new Router($routeCollection); $requestedOperationId = $router->route('http://petstore.swagger.io/v1/pets', 'get'); echo $requestedOperationId; // listPets