dispatcher / swagger-dispatcher
Swagger Dispatcher
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-29 05:14:39 UTC
README
开发继续在 https://github.com/virgiliolino/open-api
也许它是关于自动化,或者只是更声明式,因为一个非Touring完整的语言将只会更正确,无论如何,我发现使用 Open-API-Specification 来描述API并让这个规范成为你的代码的可能性真是太令人惊奇了:这个类将使用Slim的功能设置每个路由,并为每个路由指向一个CommandHandler。
我建议,最好的方法是克隆存储库并尝试示例Hello World应用程序。
git clone git@github.com:virgiliolino/SwaggerSlimDispatcher.git
cd SwaggerSlimDispatcher/Examples/HelloWorld/
composer install #composer install will actually install Slim and SwaggerSlimDispatcher
php -S localhost:8080 -t public public/index.php #start the server
curl localhost:8080/hello/world # or just open the browser localhost:8080/hello/world
对于完整的工作应用程序,您可以查看一个ReactJS + Slim框架,它提供了现代应用程序所需的所有功能。网址是 这里 The OpenApi规范是 这里
您不会有一些过度拥挤的控制器,而是每个入口点都有一个命令处理程序。您可以在以下 博客文章 中找到一些关于我们意图的架构的想法
最终,您将有一个描述您的API的yml或json文件,如下所示:
通过使用我们的库,所有路由都将自动设置。每个路由都指向一个由唯一的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/swagger-dispatcher dev-master
Examples/Helloworld
$app = new \Slim\App;
$container = $app->getContainer();
$container['HelloWorld'] = function ($c) {
return new \HelloWorld\CommandHandlers\HelloWorld();
};
$swaggerApiFile = 'routes.json';
$commandHandler = new Dispatcher\Swagger\DefaultCommandRegisterer();
$swaggerConfigParser = Dispatcher\Swagger\ParserFactory::parserFor($swaggerFile);
$swaggerConfig = $swaggerConfigParser->parse($swaggerFile);
\Dispatcher\Swagger\SwaggerDispatcher::InjectRoutesFromConfig($app, $swaggerConfig);
正如您所看到的,我们正在注入HelloWorld,一个命令处理程序,其id与您在routes.json中找到的操作Id相同。
就是这样。
需要帮助
完全没有验证。此过程可以自动化。在名为 SwaggerDispatcher 的文件中的 CommandHandler 类。
谢谢,Virgilio