googoogajoob / openapi-slim4
将Slim4和OpenApi结合在一起
Requires
- php: ^8.0 || ^8.1 || ^8.2
- cebe/php-openapi: ^1.7
- slim/slim: 4.*
README
从openapi定义配置slim4应用程序的路径。
安装
- composer require googoogajoob/openapi-slim4
要求
- Php 8.0
- Slim4
- 一个OpenApi定义(yaml或json)
用法
有多个示例说明了如何配置slim4应用程序的路由。其中这样一个骨架项目使用index.php和routes.php来完成这个任务。
openapi-slim4的测试用例在index.php中采用了这种方法,其中openapi-slim4取代了调用routes.php的需求。
关键部分是
/* BEGIN ROUTE AND MIDDLEWARE CONFIGURATION When using OpenApiSlim4, only the ELSE branch would be needed */ if ($container->get('nativeSlimConfiguration')) { require __DIR__ . '/../config/nativeSlimConfiguration.php'; slim4ConfigureRoutes($app); # slim4ConfigureGroupMiddleware($app); // Future Development slim4ConfigureGlobalMiddleware($app); } else { $openApiConfigurator = new OpenApiSlim4($container->get('openApiPath'), $app, $logger, $throwExceptionOnInvalid); if (!$openApiConfigurator->configureFramework()) { throw new Exception($openApiConfigurator->getValidationMessagesString()); } } /* END ROUTE AND MIDDLEWARE CONFIGURATION */
假设所有变量都已正确定义,绝对最小化的是2行
$openApiConfigurator = new OpenApiSlim4($container->get('openApiPath'), $app, $logger, $throwExceptionOnInvalid); $openApiConfigurator->configureFramework();
如果出现问题,请查看测试
描述
前言
With REST-API definitions there is a difference of opinion about terminology.
In particular with the terms PATH and ROUTE.
For example when referencing the REST-API endpoint GET /user/data/{id}
* Slim4 refers to "/user/data" as a ROUTE
* Openapi refers to "/user/data" as a PATH
The documentation in this project uses the two terms interchangeably
概念
openapi-slim4是一个工具,可以读取openapi规范并根据需要动态配置slim4应用程序。这包括端点处理程序以及中间件。openapi-slim4通常在应用程序的index.php入口点调用,并在每次请求时动态配置slim4。这有效地消除了通过其他PHP代码(例如routes.php)配置restapi端点的需要。
因此,当openapi定义发生变化时,slim4应用程序的路由规范将自动调整。根据规范更改的简单性,这可能会或可能不会对处理程序和中间件代码库产生更大的影响。
本质上,openapi-slim4执行以下操作:
- 将openapi端点定义映射到处理程序
- 在openapi中定义的全局中间件在slim4中配置为全局中间件
- 计划在未来的开发中配置PATH中间件
openapi定义不允许指定中间件。然而,openapi-slim4实现了对标准openapi语法的扩展,允许这样做。
“真实来源”论点
在关于在restapi开发中实现openapi的讨论中,“真实来源”论点经常出现。这个讨论的核心问题是,“openapi定义在更大的软件架构中扮演什么角色?它仅仅是文档的手段,还是restapi服务实际操作的控制系统?”
仅作文档
这个观点将openapi规范简单地视为一种文档手段。实际的“真实来源”是创建restapi服务的代码(一个php slim4应用程序或许多其他可能性)。在这种情况下,有许多生成器可以从特定的代码库中动态创建openapi文档。这可能适用于小型开发团队,其中只有少数客户端依赖于restapi服务,并且开发人员之间的沟通很简单。
控制系统
这种观点认为,OpenAPI规范不仅仅是一份文档,还是最终定义RESTAPI服务如何实际运行的文档。OpenAPI规范不仅是文档,也是配置文件。从这个意义上讲,OpenAPI定义是一种合同,所有参与者都必须遵守。这可能对大型开发团队更有意义。较小的架构团队创建定义,所有开发者都遵守它,从而减少开发者之间的沟通需求。
openapi-slim4是为了支持“控制实例”类型的操作而设计的。
具体功能
- HTTP方法处理器
- 路径中间件(未来开发)
- 全局中间件
行为
- 路径和中间件将根据OpenAPI定义设置(见下表)
- 可选的通过Psr\Log\LoggerInterface进行日志记录
- 在验证失败时可选地抛出异常
OpenAPI - Slim4映射
配置Slim4所需的参数来源于OpenAPI定义。Slim4执行配置的方法有三个参数。下表显示了它们在OpenAPI定义中的来源。
RouteCollectorProxy::map(array $methods, string $pattern, $callable): RouteInterface
参数定义和依赖注入选项
以下表格总结了为openapi-slim4对象提供设置的可能性
开发和测试
有关测试详情,请参阅tests/README.md