2017 © Pedro Peláez
 

library swagger-dispatcher

Swagger Dispatcher

image

dispatcher/swagger-dispatcher

Swagger Dispatcher

  • Monday, April 30, 2018
  • by virgiliolino
  • Repository
  • 2 Watchers
  • 4 Stars
  • 32 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 2 Open issues
  • 2 Versions
  • 3 % Grown

The README.md

SlimSwaggerDispatcher - DISCONTINUED

Development continue on https://github.com/virgiliolino/open-api

Maybe it's about automation, or just about beign more declarative because a DSL non Touring complete language will just more correct, anyway I find it just amazing the possibility to describe an API by using the Open-API-Specification and let this specification be your code: this class will set every route using the Slim functionalities, and for every route point to a CommandHandler., (*1)

I'd suggest, the best way to see it in action is just to clone the repository and try the Example Hello World Application:, (*2)

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

For a fully working application, you could take a look at a ReactJS + Slim Skeleton that provides all the functionalities needed for a modern application. The url is here The OpenApi specification is here, (*3)

You will not have a few overpopulated Controllers, but instead for every entry point a command handler. You can read at this blog post for some ideas of how we intend our architecutre, (*4)

Furthermore, the Api specification from Swagger can be automatically validated, tested Swagger, (*5)

In the end you'll have a yml or json file that describe your API, something like this: Json Specification, (*6)

By using our library all routes will automatically be set. Every route pointing to a CommandHandler indicated by a unique operationId. So in the image of the example, you can see that there is a route: /pet that accept post requests. It will be enough to use our class, when you start the application the route /pet will accept a post. And so for the gets that you see below, like /pet/findByStatus, etc. For every path, it will be executed the command handler with the operationI. In the example for /pet, you can see the operationId: addPet. So making a post request to /pet, the system will try to execute the class AddPet::execute passing the params. The operationId must be a fully qualified name of a class. Something like this for example: operationId: \MyApplication\CommandHandlers\AddPett which means that will execue AddPett::execute, (*7)

You may find an example of a fully working Open-Api specification here the full json file, (*8)

Installation

Even if its working, I'd not consider it really a stable package. So to install it you need to proceed in that way:, (*9)

 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);

As you may see we're injecting HelloWorld, a command Handler with the same id of operationId that you may find on routes.json, (*10)

That's all folks., (*11)

Help wanted

There is no validation at all. This process can be automatized. Class CommandHandler on the file called SwaggerDispatcher., (*12)

Thanks, Virgilio, (*13)

The Versions

30/04 2018

dev-master

9999999-dev https://github.com/virgiliolino/SwaggerSlimDispatcher

Swagger Dispatcher

  Sources   Download

GPL LGPL-3.0-or-later

The Requires

  • php >=5.3.0

 

framework route dispatcher swagger slim builder

12/01 2018

dev-feature/InjectableCommandregisterer

dev-feature/InjectableCommandregisterer https://github.com/virgiliolino/SwaggerSlimDispatcher

Swagger Dispatcher

  Sources   Download

GPL

The Requires

  • php >=5.3.0

 

framework route dispatcher swagger slim builder