rollun-com/rollun-openapi-server-bridge

Bridge between rollun skeleton and openapi generated code


License
MIT

Documentation

OpenAPI server generator bridge

Библиотека, которая дает возможность подключить, сгенерированный OpenAPI генератором, серверный код к вашему проекту.

Установка:

  1. Установите openapi-generator. Для проверки выполните команду:

    openapi-generator version, в случае когда openapi-generator установлен вы увидите версию генератора.

  2. Установите библиотеку, для этого выполните команду

    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); 
  3. Подготовьте openapi манифест. Детали здесь.

  4. Скачайте openapi манифест. Для этого перейдите на https://app.swaggerhub.com/home?type=API, откройте нужный вам манифест и сделайте экспорт в виде yaml файла. При скачивании, рекомендуется называть документ openapi.yaml так, как такое имя используется генератором по умолчанию. alt text

  5. Для генерации кода выполните команду:

    php vendor/bin/openapi-server-generate

  6. Обязательно добавьте сгенерированные классы в аутолоадер композера.

      "autoload": {
        "psr-4": {
          "SomeModule\\": "src/SomeModule/src/"
        }
      },
    

HTTP headers и кодогенератор:

К сожалению, данный генератор не умеет генерировать код для обработки заголовков. По этому в случае еслы вы хотите провалидировать входящие заголовки - воспользуйтесь данной инструкцией.

  1. Создайте 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;
     }
  2. В вашем 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 класса в котором будут описаны все заголовки конкретного метода.

  3. Для получения headers:

    $headerData = $request->getAttribute("headerData");