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.
- A valid OpenAPI specification.
- An operationId on all Operation Objects so that each route is uniquely identifiable.
- 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.
- Static urls MUST be prioritized over dynamic urls.
- Longer urls are prioritized over shorter urls.
- Hosted servers will be prioritized over hostless servers.
composer require membrane/openapi-router
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
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