Yii Swagger
OpenAPI Swagger for Yii Framework.
Requirements
- PHP 8.0 or higher.
Installation
The package could be installed with composer:
composer require yiisoft/yii-swagger
Configuration
config/routes.php
1. Add route configuration to use Yiisoft\DataResponse\Middleware\FormatDataResponseAsHtml;
use Yiisoft\DataResponse\Middleware\FormatDataResponseAsJson;
use Yiisoft\Router\Group;
use Yiisoft\Router\Route;
use Yiisoft\Swagger\Middleware\SwaggerUi;
use Yiisoft\Swagger\Action\SwaggerJson;
// Swagger routes
Group::create('/swagger', [
Route::get('')
->middleware(FormatDataResponseAsHtml::class)
->action(fn (SwaggerUi $swaggerUi) => $swaggerUi->withJsonUrl('/swagger/json-url')),
Route::get('/json-url')
->middleware(FormatDataResponseAsJson::class)
->action(SwaggerJson::class),
]),
2. Add annotations to default API controller
use OpenApi\Annotations as OA;
/**
* @OA\Info(title="My first API", version="1.0")
*/
class DefaultController {
// ...
}
and before actions
/**
* @OA\Get(
* path="/api/endpoint",
* @OA\Response(response="200", description="Get default action")
* )
*/
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// ...
}
See Swagger-PHP documentation for details on how to annotate your code.
SwaggerJson
action
3. Configure For annotations to be registered you need to configure SwaggerJson
.
You can use the parameters in config/params.php
to configure SwaggerJson
:
//...
'yiisoft/yii-swagger' => [
'annotation-paths' => [
'@src/Controller' // Directory where annotations are used
],
'cacheTTL' => 60 // Enables caching and sets TTL, "null" value means infinite cache TTL.
],
//...
4. (Optional) Add config for aliases and asset manager
use Yiisoft\Definitions\Reference;
use Yiisoft\Assets\AssetManager;
return [
//...
'yiisoft/aliases' => [
'aliases' => [
//...
'@views' => '@root/views',
'@assets' => '@public/assets',
'@assetsUrl' => '@baseUrl/assets',
],
],
'yiisoft/view' => [
'basePath' => '@views',
'defaultParameters' => [
'assetManager' => Reference::to(AssetManager::class),
]
],
//...
];
SwaggerUi
action
5. (Optional) Configure You can use the parameters in config/params.php
to configure SwaggerUi
.
For example, you can enable persisting authorization by setting the persistAuthorization
parameter to true
.
//...
'yiisoft/yii-swagger' => [
'ui-params' => [
'persistAuthorization' => true,
],
],
//...
You can find a complete list of parameters by following the link.
SwaggerService
6. (Optional) Configure You can specify options for generation an OpenApi\Annotations\OpenApi
instance in config/params.php
to configure SwaggerService
:
//...
'yiisoft/yii-swagger' => [
// Default values are specified.
'open-api-options' => [
'aliases' => OpenApi\Generator::DEFAULT_ALIASES,
'namespaces' => OpenApi\Generator::DEFAULT_NAMESPACES,
'analyser' => null,
'analysis' => null,
'processors' => null,
'logger' => null,
'validate' => true,
'version' => OpenApi\Annotations\OpenApi::DEFAULT_VERSION,
],
],
//...
For more information about generation an OpenApi\Annotations\OpenApi
instance, see the
documentation of the zircote/swagger-php package.
Testing
Unit testing
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
Mutation testing
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
Static analysis
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
License
The Yii Swagger is free software. It is released under the terms of the BSD License.
Please see LICENSE
for more information.
Maintained by Yii Software.