Pull to refresh

Comments 3

Брр, а чем swagger-php не угодил? Он же легко и просто генерит спеку на основе типизированных аттрибутов (с аннотациями сложнее).

У нас каждая новая версия API - это отдельный модуль yii2, контроллеры которого наследуются от контроллеров предыдущей версии;

Т.е. сейчас, условно, на 20-й версии у каждого контроллера 19 предков?

На момент старта работы над генератором (середина 2020-го) была версия zircote/swagger-php 3.0.5, в которой поддержки атрибутов не было, как и самих атрибутов в стабильной версии языка (php 8 ещё не вышла).

на 20-й версии у каждого контроллера 19 предков

Верно.

Мы недавно сделали похожую штуку на основе zircote/swagger-php с дополнительной обработкой. Входные и выходные типы берутся из кода с помощью рефлексии, по аналогии с библиотекой GraphQLite для GraphQL. Для других кодов ответа используется специальный класс HttpException и аннотация из zircote/swagger-php.


class SomeController {
  #[Post(...)]
  #[OA\Response(401, 'Unauthorized')]
  public function someAction(#[Body] RequestDTO $requestDto): ResponseDTO
  {
    if (!$this->checkAccess()) {
      throw new HttpException('Not allowed', 401);
    }

    return new ResponseDTO(...);
  }
}

#[OA\Schema]
class RequestDTO {
  ...
}

#[OA\Schema]
class ResponseDTO {
  ...
}
Sign up to leave a comment.

Articles