googoogajoob/openapi-slim4

此包的最新版本(1.0.0)没有提供许可证信息。

将Slim4和OpenApi结合在一起

1.0.0 2023-06-24 16:33 UTC

This package is auto-updated.

Last update: 2024-09-28 22:28:47 UTC


README

从openapi定义配置slim4应用程序的路径。

Total Downloads

安装

  • composer require googoogajoob/openapi-slim4

要求

  • Php 8.0
  • Slim4
  • 一个OpenApi定义(yaml或json)

用法

有多个示例说明了如何配置slim4应用程序的路由。其中这样一个骨架项目使用index.phproutes.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