OpenAPI server generator bridge
Библиотека, которая дает возможность подключить, сгенерированный OpenAPI генератором, серверный код к вашему проекту.
Установка:
-
Установите openapi-generator. Для проверки выполните команду:
openapi-generator version
, в случае когда openapi-generator установлен вы увидите версию генератора. -
Установите библиотеку, для этого выполните команду
composer require rollun-com/rollun-openapi-server-bridge
-
!!!ВАЖНО!!! После того как композер отработает, проверьте чтобы в файле
/config/config.php
конфиг провайдер\OpenAPI\Server\ConfigProvider::class
загружался после\Zend\Expressive\Router\FastRouteRouter\ConfigProvider::class
в ином случаем работать не будет. -
!!!ВАЖНО!!! Для того чтобы не было проблем с инъекцией зависимостей вам нужно проверить чтобы LifeCycleToken был добавлен в контейнер до создания app. Проверьте это в /public/index.php. Пример правильного добавления LifeCycleToken:
// Init lifecycle token $lifeCycleToken = LifeCycleToken::generateToken(); if (LifeCycleToken::getAllHeaders() && array_key_exists("LifeCycleToken", LifeCycleToken::getAllHeaders())) { $lifeCycleToken->unserialize(LifeCycleToken::getAllHeaders()["LifeCycleToken"]); } $container->setService(LifeCycleToken::class, $lifeCycleToken); /** @var Application $app */ $app = $container->get(Application::class);
-
-
Подготовьте openapi манифест. Детали здесь.
-
Скачайте openapi манифест. Для этого перейдите на https://app.swaggerhub.com/home?type=API, откройте нужный вам манифест и сделайте экспорт в виде yaml файла. При скачивании, рекомендуется называть документ openapi.yaml так, как такое имя используется генератором по умолчанию.
-
Для генерации кода выполните команду:
php vendor/bin/openapi-server-generate
-
Обязательно добавьте сгенерированные классы в аутолоадер композера.
"autoload": { "psr-4": { "SomeModule\\": "src/SomeModule/src/" } },
HTTP headers и кодогенератор:
К сожалению, данный генератор не умеет генерировать код для обработки заголовков. По этому в случае еслы вы хотите провалидировать входящие заголовки - воспользуйтесь данной инструкцией.
-
Создайте DTO класс по обработке headers. Пример подобного класса:
<?php declare(strict_types=1); namespace OpenAPI\Server\HowToBuyVersion1\DTO; use Articus\DataTransfer\Annotation as DTA; class DTO_CLASS_FOR_OPERATION_HEADER { /** * @DTA\Data(field="lifecycletoken", nullable=false) * @DTA\Strategy(name="QueryParameter", options={"type":"string"}) * @DTA\Validator(name="QueryParameterType", options={"type":"string"}) * @var string */ public $life_cycle_token; }
-
В вашем handler в аннотациях к методу нужно добавить следующее:
* @PHA\Attribute(name=PHAttribute\Transfer::class, options={ * "type":\OpenAPI\Server\YOUR_NAMESPACE\DTO\DTO_CLASS_FOR_OPERATION_HEADER::class, * "objectAttr":"headerData", * "source": PHAttribute\Transfer::SOURCE_HEADER * })
YOUR_NAMESPACE - неймспейс вашего апи
DTO_CLASS_FOR_OPERATION_HEADER - имя DTO класса в котором будут описаны все заголовки конкретного метода.
-
Для получения headers:
$headerData = $request->getAttribute("headerData");