dispatcher/open-api

基于数据的调度器,实现了 OpenApi 规范

1.0.0 2018-04-30 20:53 UTC

This package is not auto-updated.

Last update: 2024-09-18 21:00:20 UTC


README

这可能是关于自动化,或者只是关于更加声明性,因为一个非 Touring 完全的 DSL 将更加正确,我发现使用 Open-API-Specification 描述 API 的可能性以及让这个规范成为你的代码是如此令人惊叹:这个类将使用 Slim 功能设置每个路由,并为每个路由指向一个 CommandHandler。

我建议,最好的方法就是克隆仓库并尝试示例 Hello World 应用程序

git clone git@github.com:virgiliolino/open-api.git
cd open-api/Examples/HelloWorld/
composer install   #composer install will actually install Slim and open-api
php -S localhost:8080 -t public #start the server
curl localhost:8080/hello/world # or just open the browser localhost:8080/hello/world

对于完整的应用程序,您可以查看一个提供现代应用程序所需所有功能的 ReactJS + Slim 框架。网址是 这里 OpenApi 规范 在这里

您不会有许多过度拥挤的控制器,而是一个命令处理程序。您可以在这篇 博客文章 中找到一些关于我们打算如何构建我们的架构的想法

此外,Open-Api 规范可以自动验证、测试 Swagger

最终,您将得到一个描述您的 API 的 yml 或 json 文件,类似于这样:Json Specification

通过使用我们的库,所有路由都将自动设置。每个路由指向一个由唯一 operationId 指定的 CommandHandler。所以,在示例图像中,您可以看到一个路由:/pet 接受 POST 请求。当您启动应用程序时,/pet 路由将接受 POST。对于您下面看到的 GET 请求,例如 /pet/findByStatus 等。对于每个路径,它将执行带有 operationI 的命令处理程序。在 /pet 的示例中,您可以看到 operationId: addPet。所以向 /pet 发送 POST 请求时,系统将尝试执行类 AddPet::execute 并传递参数。operationId 必须是一个完全限定的类名。例如:operationId: \MyApplication\CommandHandlers\AddPett,这意味着将执行 AddPett::execute

您可以在 这里 找到一个完整工作的 Open-Api 规范的示例,以及 完整的 json 文件

安装

composer require dispatcher/open-api

Examples/Helloworld

require 'vendor/autoload.php';
$app = new \Slim\App;
$container = $app->getContainer();
//your command Handlers need to be injected by operationId
$container['HelloWorld'] = function () {
    return new \HelloWorld\CommandHandlers\HelloWorld();
};
$openApiFile = 'routes.json';
$openApiConfigParser = Dispatcher\OpenApi\ParserFactory::parserFor($openApiFile);
$openApiConfig = $openApiConfigParser->parse($openApiFile);
$applicationBridge = new \Sab\Application\Bridge\SlimBridge($app);
$routesInjector = new \Dispatcher\OpenApi\Route\DefaultRouteInjector();
$openApiDispatcher = new \Dispatcher\OpenApi\OpenApiDispatcher($routesInjector);
$openApiDispatcher->InjectRoutesFromConfig($applicationBridge, $openApiConfig);

$app->run();

如您所见,我们正在注入 HelloWorld,一个命令处理程序,其 id 与在 routes.json 中找到的 operationId 相同

这就是全部了。

需要帮助

没有任何验证。此过程可以自动化。在名为 SwaggerDispatcher 的文件中,类 CommandHandler

谢谢,Virgilio