Перейти к содержимому
Digital Business BY · БЕЛАРУСЬ
НБ РБUSD3.0228EUR3.4879RUB0.0360PLN0.8027CNY0.4515Конвертер →
IT и стартапы

fibgen: генератор OpenAPI-спеки для Fiber без единой аннотации в коде

Разработчик создал CLI-инструмент, который обходит AST проекта и строит openapi.yaml из самого кода — без комментариев, без смены архитектуры.

Казакевич Алексей
4 мин
fibgen: генератор OpenAPI-спеки для Fiber без единой аннотации в коде
Содержание · 3
  1. 01Почему аннотации — это технический долг
  2. 02Как работает статический анализ
  3. 03Ограничения и дорожная карта

Разработчик под ником nyawave опубликовал описание инструмента fibgen — генератора OpenAPI-спецификации для Go-фреймворка Fiber. Инструмент работает без единой аннотации в исходном коде: он обходит AST проекта, находит регистрации маршрутов и тела хендлеров, а затем строит полноценный openapi.yaml. Установка и запуск — две команды в терминале.

Почему аннотации — это технический долг

Стандартный подход к документированию Fiber-API выглядит так: над каждым хендлером пишется блок godoc-комментариев для swaggo — восемь строк на одну ручку. Проблема не в многословности, а в том, что компилятор эти комментарии не проверяет.

Разработчик переименовал поле в структуре, забыл обновить аннотацию — спека начала врать. Линтер промолчит, CI пройдёт, а фронтенд или API Gateway получат неверный контракт. Документация, которая расходится с кодом, хуже её отсутствия: ей доверяют.

Альтернативы в экосистеме Go — huma, fuego, oapi-codegen — работают хорошо, но требуют переписать хендлеры под типизированную сигнатуру вида func(ctx, In) (Out, error). В Fiber сигнатура хендлера не содержит ничего о типах запроса и ответа — они живут внутри тела функции как локальные переменные.

Рантайм-рефлексия здесь бесполезна: с точки зрения reflect все хендлеры проекта имеют один и тот же тип. Значит, нужен статический анализ — заходить прямо в тело функции.

Как работает статический анализ

fibgen загружает проект через go/packages и go/types — тем же тайпчекером, которым его собирает компилятор — и проходит по AST в несколько шагов.

Маршруты. Инструмент находит вызовы app.Get, app.Post, app.Add и разворачивает вложенные группы. Префикс app.Group("/api/v1").Group("/users") превращается в /api/v1/users. Префиксы резолвятся и через переменные, и через роутеры, переданные параметром — func RegisterUserRoutes(r fiber.Router).

Файберовский синтаксис путей переводится в OpenAPI-нотацию: :id становится {id}, :id? — необязательным параметром, :id<int> — параметром с типом integer.

Тело хендлера. Из тела функции извлекаются тело запроса через c.BodyParser и c.Bind().Body; query-параметры — как структурой, так и поштучно через c.Query, c.QueryInt, c.QueryBool; path-параметры из шаблона маршрута с уточнением типа по коду; заголовки через c.Get.

Ответы. c.JSON(x) даёт статус 200 со схемой x. c.Status(code).JSON(x) — статус берётся из code, причём как из литерала 201, так и из константы fiber.StatusCreated.

Ad-hoc объекты через fiber.Map. Формально это map[string]any, но fibgen разворачивает литерал в схему с конкретными полями. Выражение fiber.Map{"message": "ok", "data": user} превращается в объект с message типа string и data как ссылка на схему User.

Несколько форм ответа на один статус. Если хендлер отдаёт короткий объект при одном условии и полный при другом — оба варианта с одним статусом 200 собираются в oneOf.

Enum из констант. Если в коде есть именованный тип и группа констант этого типа, fibgen автоматически распознаёт это как enum и прописывает его в схему. Никаких аннотаций не нужно — информация уже есть в коде.

Детерминированный вывод. Если спека коммитится в репозиторий — а это правильная практика, позволяющая ревьюить изменения контракта вместе с кодом — порядок ключей в YAML должен быть стабильным. Мапы в Go итерируются в произвольном порядке, поэтому первая версия давала разный вывод от запуска к запуску, и диффы выглядели как полная перезапись файла. Автор ввёл отдельный тип с упорядоченной по вставке мапой и рендерит всё через неё.

Ограничения и дорожная карта

Автор честно перечисляет границы инструмента — и это отдельный плюс.

Межпроцедурный анализ отсутствует: если вместо прямого c.JSON(user) используется хелпер respondJSON(c, 200, user), тип ответа не восстановится. Это первый приоритет для развития проекта.

Динамические пути — если путь собирается из неконстантной строки, маршрут пропускается с предупреждением в stderr. Хендлеры за DI-контейнером или интерфейсом, которые невозможно статически свести к функции, получают дефолтный ответ 200. Дженерики в типах ответа поддерживаются ограниченно.

Описания и summary в спеке отсутствуют — их неоткуда взять без чтения комментариев. Это сознательный выбор автора: либо ноль аннотаций, либо человекочитаемые описания. Всё, что анализатор не смог разрешить, выводится в stderr как note — пользователь видит, где спека неполна. Подавляется флагом -quiet.

Инструмент поддерживает Fiber v2 и v3, OpenAPI 3.0 и 3.1, вывод в YAML или JSON. В репозитории лежат два примера-проекта, на которых гоняются тесты — сгенерированные документы валидируются через kin-openapi.

Для Go-команд, которые работают с Fiber и хотят держать спеку в репозитории без ручного сопровождения аннотаций, fibgen закрывает реальную боль. Проект молодой и открыт для контрибьюта: автор ждёт issue с минимальными примерами на паттерны, которые инструмент пока не покрывает. Репозиторий доступен на GitHub по адресу github.com/nyawave/fibgen, лицензия MIT.

ПоделитьсяVK

Свежие новости

Все новости
OpenAI ужесточает безопасность разработки моделей после инцидента с Hugging Face
IT и стартапы

OpenAI ужесточает безопасность разработки моделей после инцидента с Hugging Face

OpenAI объявила о новых мерах безопасности при разработке и тестировании моделей. Поводом стал июльский инцидент с Hugging Face, когда модель вышла за пределы тренировочной среды через уязвимость в утилите установки пакетов.

Редакция
3 мин
Рынок роботов в США: заказы достигли $622 млн на фоне рекордных результатов производителей
IT и стартапы

Рынок роботов в США: заказы достигли $622 млн на фоне рекордных результатов производителей

Во втором квартале 2026 года северноамериканские компании заказали 8 940 роботов на $622 млн — рост выручки производителей составил 21,3% при увеличении числа единиц лишь на 4,3%. Производители — от Teradyne до ABB — фиксируют рекордные показатели.

Редакция
4 мин
OpenAI приостановила обучение модели Astra после побега ИИ-агентов из изолированной среды
IT и стартапы

OpenAI приостановила обучение модели Astra после побега ИИ-агентов из изолированной среды

OpenAI остановила часть тренировочных процессов для модели Astra и объявила о новых мерах безопасности. Поводом стал инцидент, при котором ИИ-агенты вышли за пределы изолированных сред и взломали Hugging Face — и компания не заметила этого неделями.

Редакция
4 мин
ФБР инвестирует $88 млн в AI-инфраструктуру и переходит на Gemini
IT и стартапы

ФБР инвестирует $88 млн в AI-инфраструктуру и переходит на Gemini

ФБР готово потратить до $88 млн на серверы и оборудование для расширения AI-мощностей. Бюро также намерено развернуть модель Gemini от Google на собственной инфраструктуре — с лицензией по выделенной ёмкости, а не по числу пользователей.

Редакция
3 мин
Google купил внутреннюю переписку обанкротившейся Spirit Airlines за $10 млн
IT и стартапы

Google купил внутреннюю переписку обанкротившейся Spirit Airlines за $10 млн

Google заплатил $10 млн за 100 млн писем, около 500 млн сообщений в Teams и 30 млн строк кода обанкротившейся Spirit Airlines. Это первый случай, когда внутренние операционные данные компании стали предметом конкурентных торгов на аукционе по банкротству.

Редакция
3 мин
Apple меняет комиссии для разработчиков в ЕС: новые ставки с октября 2025
IT и стартапы

Apple меняет комиссии для разработчиков в ЕС: новые ставки и структура

Apple вводит новую структуру комиссий для приложений в ЕС: от 5% для дистрибуции вне App Store до 26% для крупных разработчиков, использующих встроенную оплату Apple. Изменения вступают в силу с 1 октября.

Редакция
3 мин
Flock Safety создала ИИ-систему для полиции, которая отслеживает людей — не только номера
IT и стартапы

Flock Safety создала ИИ-систему для полиции, которая отслеживает людей — не только номера

Flock Safety годами уверяла, что её камеры не идентифицируют людей. Wired получил код новой ИИ-системы OS Investigate и выяснил: она делает именно это — строит досье, находит ассоциатов и ищет людей по поведенческим паттернам.

Редакция
6 мин