membrane / openapi-router
0.4.0
2024-04-17 14:06 UTC
Requires
- php: ^8.1.0
- cebe/php-openapi: ^1.7
- membrane/openapi-reader: ^2.0.0
- psr/http-message: ^1.0 || ^2.0
- psr/log: ^3.0
- symfony/console: ^6.2
Requires (Dev)
- guzzlehttp/psr7: ^2.4
- infection/infection: ^0.27.0
- mikey179/vfsstream: ^1.6.7
- phpstan/phpstan: ^1.10.56
- phpunit/phpunit: ^10.2
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-17 15:06:03 UTC
README
此库将 HTTP 请求路由到 OpenAPI 规范中的 operationId。为了确保其运行速度快,我们使用了受 Nikita Popov 和 Nicolas Grekas 启发的技术。
要求
- 有效的 OpenAPI 规范。
- 所有 操作对象 上必须有 operationId,以便每个路由都可以唯一标识。
规则
命名约定
- 由于 paths 必须以正斜杠开头,因此服务器 URL 结尾的正斜杠将被忽略。
- 除了变量名称不同之外,相同的动态路径不应存在。
路由优先级
- 静态 URL 必须优先于动态 URL。.
- 较长的 URL 优先于较短的 URL。
- 托管服务器将优先于无服务器。
安装
composer require membrane/openapi-router
快速入门
要动态读取路由,可以执行以下操作
<?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
缓存路由
运行以下控制台命令以从您的 OpenAPI 缓存路由,避免每次都读取您的 OpenAPI 文件
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