Reputation: 333
I am new to this stuff but I love it. I made a little REST Api using the Slim Framework. Now I would like to have an ongoing documentation about it. I think swagger is the right choice but I have not found out yet how to integrate it ?
Cheers & thanks for your patience :)
Upvotes: 23
Views: 26086
Reputation: 1
When you're searching for a Swagger integration that is fully automatically derived from your PHP code, you can have a look at my latest project: https://github.com/lnaegele/PSwag
This project bases on Slim and provides an OpenAPI 3.0 spec and a swagger page "on the fly" - without any manual generation steps from your side. You just need to specify datatypes to parameters and returns of your API methods.
Example: Create an endpoint function in PetApplicationService.class:
/**
* Find pet by ID
* @param int $petId ID of pet to return
* @return Pet Returns a single pet
*/
public function getPetById(int $petId): Pet {
return new Pet(...);
}
In your index.php you register the endpoint in PSwagApp which is a wrapper around SlimApp:
// create SlimApp and wrapper PSwagApp
$slimApp = AppFactory::create();
$app = new PSwagApp($slimApp);
...
// add swagger middleware
$app->addSwaggerUiMiddleware('/swagger', 'PSwag example', '1.0.0', 'vendor/swagger-api/swagger-ui/dist/');
// register endpoints by specifying class and method name
$app->get('/pet/{petId}', [PetApplicationService::class, 'getPetById']);
The result will look like this:
Upvotes: 0
Reputation: 189
A short update to the answer of adosaiguas:
When using Slim Framework 4.0 and zircote/swagger-php one can provide an api endpoint providing the swagger / OpenAPI 3.0 json description using the following code:
use function OpenApi\scan;
/**
* @OA\Get(
* path="/openapi",
* tags={"documentation"},
* summary="OpenAPI JSON File that describes the API",
* @OA\Response(response="200", description="OpenAPI Description File"),
* )
*/
$app->get('/openapi', function ($request, $response, $args) {
$swagger = scan('--PATH TO PROJECT ROOT--');
$response->getBody()->write(json_encode($swagger));
return $response->withHeader('Content-Type', 'application/json');
});
Upvotes: 6
Reputation: 1330
I think you are looking for this project: zircote/swagger-php
Here you'll find how to generate the doc on user request to a URL.
Basically you have to annotate your code with the Swagger Annotations, then create another route in Slim with a code similar to this:
<?php
use Swagger\Swagger;
$swagger = new Swagger('/project/root/top_level');
header("Content-Type: application/json")
echo $swagger->getResource('/pet', array('output' => 'json'));
And it will generate the Swagger API docs on the fly for you.
Upvotes: 28