Swagger/OpenAPI генерация для PHP: лучшие инструменты и библиотеки

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Swagger/OpenAPI генерация для PHP: автоматизация документирования API

Swagger (теперь OpenAPI) — это стандарт описания RESTful API, который позволяет разработчикам, клиентам и автоматизированным инструментам понимать возможности сервиса без доступа к исходному коду. Для PHP-разработчиков ключевым инструментом является библиотека zircote/swagger-php (ранее известная как swagger-php), которая автоматически генерирует OpenAPI-спецификацию из аннотаций в коде.

Что такое zircote/swagger-php?

Это основная библиотека для генерации OpenAPI спецификаций в PHP. Она анализирует PHPDoc-аннотации в контроллерах, моделях и маршрутах, создавая JSON/YAML файл, который можно использовать для:

  • Автоматической генерации документации (Swagger UI, ReDoc)
  • Генерации клиентских библиотек для различных языков
  • Тестирования API (Postman, Insomnia)
  • Валидации запросов и ответов

Установка и настройка

Установка через Composer:

composer require zircote/swagger-php

Минимальная конфигурация для Laravel (или любого фреймворка) включает создание аннотаций в контроллере. Пример простого контроллера с OpenAPI-аннотациями:

<?php

namespace App\Http\Controllers\Api;

use OpenApi\Annotations as OA;

/**
 * @OA\Info(title="My API", version="1.0.0")
 * @OA\Server(url="https://api.example.com")
 */
class UserController extends Controller
{
    /**
     * @OA\Get(
     *     path="/api/users/{id}",
     *     summary="Получить пользователя по ID",
     *     @OA\Parameter(
     *         name="id",
     *         in="path",
     *         required=true,
     *         @OA\Schema(type="integer")
     *     ),
     *     @OA\Response(
     *         response=200,
     *         description="Успешный ответ",
     *         @OA\JsonContent(ref="#/components/schemas/User")
     *     ),
     *     @OA\Response(response=404, description="Пользователь не найден")
     * )
     */
    public function show($id)
    {
        // логика
    }
}

Генерация спецификации

Для создания файла OpenAPI выполните команду:

vendor/bin/openapi src -o public/openapi.yaml

Или используйте PHP-код:

<?php

use OpenApi\Generator;

$openapi = Generator::scan(['/path/to/project/src']);
file_put_contents('public/openapi.json', $openapi->toJson());

Продвинутые возможности

Библиотека поддерживает:

  • Вложенные схемы — автоматическое создание моделей из аннотаций
  • Группировку эндпоинтов через @OA\Tag
  • Безопасность — @OA\SecurityScheme для JWT, OAuth2
  • Примеры запросов — @OA\RequestBody с примерами

Пример модели с аннотациями:

<?php

/**
 * @OA\Schema(
 *     schema="User",
 *     required={"id", "email"},
 *     @OA\Property(property="id", type="integer", format="int64"),
 *     @OA\Property(property="email", type="string", format="email"),
 *     @OA\Property(property="name", type="string"),
 *     @OA\Property(property="created_at", type="string", format="date-time")
 * )
 */
class User
{
    // свойства
}

Интеграция с фреймворками

Для Laravel существует пакет darkaonline/l5-swagger, который добавляет:

  • Автоматическую генерацию при каждом запросе
  • Встроенный Swagger UI
  • Конфигурацию через config файл

Установка:

composer require darkaonline/l5-swagger
php artisan vendor:publish --provider="L5Swagger\L5SwaggerServiceProvider"

Для Symfony используйте nelmio/api-doc-bundle.

Сравнение с альтернативами

ИнструментОсобенностиКогда использовать
zircote/swagger-phpАннотации, минимальная конфигурацияДля проектов без фреймворка или с кастомной архитектурой
darkaonline/l5-swaggerГотовая интеграция с LaravelДля проектов на Laravel
nelmio/api-doc-bundleГлубокая

Рекомендаций