Когда команда разрабатывает REST API, возникает знакомая многим ситуация: бэкенд-разработчики понимают, как работает их код, но эта информация существует только в их сознании. Фронтенд-разработчики вынуждены постоянно спрашивать, как передать тот или иной параметр, аналитики создают таблицы в Confluence, которые устаревают ещё до того, как их успевают прочитать, а техрайтеры пытаются собрать разрозненные фрагменты в единую документацию. В итоге документация устаревает в момент публикации, потому что API меняется быстрее, чем кто-либо успевает обновить километры страниц в системе управления знаниями.
OpenAPI Specification (OAS) решает эту проблему. Спецификация предоставляет единый стандарт описания REST API в машиночитаемом формате – YAML или JSON. Спецификация становится связующим звеном, которое понятно и людям, и программному обеспечению. Она позволяет автоматически строить интерактивную документацию, создавать моки, клиенты и проводить тесты.
Что такое OpenAPI Specification
OpenAPI Specification представляет собой открытый, независимый от языка программирования стандарт описания HTTP API в машиночитаемом формате – YAML или JSON. Спецификация описывает доступные эндпоинты, принимаемые параметры, возвращаемые ответы, способы авторизации и многие другие стороны работы API.
Исторически формат носил название Swagger. Первая версия Swagger Specification вышла в 2011 году, а в 2014-м появилась версия Swagger 2.0. В 2015 году спецификацию передали в Linux Foundation, где была создана OpenAPI Initiative. С 2016 года стандарт официально называется OpenAPI Specification: в 2017-м вышла версия 3.0, в 2021-м – 3.1, а в 2025-м – 3.2.
Важно различать термины, которые часто используются как синонимы, но означают разные вещи:
| Термин | Определение |
| Swagger | Изначальное название формата. Сейчас это набор инструментов (Swagger UI, Swagger Editor, Swagger Codegen) |
| OpenAPI Specification | Официальное название стандарта начиная с версии 3.0 |
| OAS | Сокращение от OpenAPI Specification |
Спецификацию можно писать в YAML, который легче для понимания человека, или в JSON, который удобнее для машин и парсеров.
В версии 3.0 появилась поддержка нескольких серверов, разделение запросов и ответов, улучшенная модель безопасности. Версия 3.1 привела спецификацию в соответствие с JSON Schema 2020-12, что упростило валидацию и кодогенерацию. Версия 3.2 добавила иерархические теги, встроенную поддержку потоковых ответов (Server-Sent Events, JSON Lines), возможность описывать нестандартные HTTP-методы через additionalOperations и формализовала синтаксис путей.
Зачем нужна OpenAPI Specification
Преимущества OpenAPI – это вполне конкретные сценарии из практики реальной разработки, с которыми команды сталкиваются ежедневно. Рассмотрим самые распространенные:
- Единый контракт означает, что разработчик, аналитик и техрайтер говорят об одном и том же API на одном языке. Исчезают разночтения между «я думал, там строка» и «а у нас в коде integer». Спецификация становится источником истины, к которому обращаются все участники процесса. Это существенно сокращает время на согласования и уменьшает количество ошибок.
- Автогенерация документации. Из спецификации автоматически создается интерактивная документация – Swagger UI, Redoc, Stoplight. Разработчики видят эндпоинты, параметры, примеры запросов и ответов, могут попробовать, как работает API прямо в браузере. Это сокращает время на онбординг новых сотрудников и уменьшает количество вопросов в чатах.
- Параллельная разработка. Фронтенд и бэкенд могут работать одновременно: бэкенд ещё пишет логику, а фронтенд уже интегрируется с мок-сервером на основе спецификации. Обычно ситуация обратная: ожидание готовности бэкенда часто становится «узким местом» в разработке. Параллельная разработка особенно важна в больших командах, где одновременная работа является определяющим фактором. Она позволяет повысить скорость релизов.
- Кодогенерация. Из спецификации генерируются клиенты (SDK), серверные заглушки, типы для TypeScript и другие артефакты через OpenAPI Generator, Swagger Codegen. Это экономит часы монотонной работы и снижает риск ошибок в ручном коде, позволяя разработчикам сосредоточиться на бизнес-логике, а не на написании шаблонного кода для взаимодействия с API.
- Автоматизация тестирования. API-тесты строятся на основе описанных контрактов: валидация схем, проверка обязательных полей, негативные сценарии. Спецификация становится основой для автоматизированного тестирования, а не просто документацией, что повышает надёжность API и снижает вероятность регрессионных ошибок при изменениях.
- Design-first подход означает, что сначала пишется спецификация, потом код. Ошибки в контракте находятся до разработки, а не после релиза, что снижает стоимость исправлений и ускоряет вывод продукта на рынок. Этот подход также позволяет выявить проблемы в дизайне API на ранней стадии, когда их исправление требует минимальных усилий.
Когда спецификация становится основой для SDK, моков и тестов, API перестаёт быть «просто эндпоинтами» и становится продуктом с предсказуемым поведением. Это снижает порог входа для новых разработчиков, ускоряет онбординг и уменьшает количество обращений в поддержку, поскольку документация становится полной и актуальной.
В 2025–2026 годах спецификации OpenAPI всё чаще читают не только люди, но и AI-агенты, которые генерируют код, тесты и интеграции. Спецификация сегодня – это инвестиция в будущую автоматизацию, которая позволяет сократить время на разработку и интеграцию в долгосрочной перспективе.
Структура спецификации OpenAPI
Спецификация OpenAPI – это YAML- или JSON-документ с чёткой структурой, которая описывает все аспекты работы API. Основные блоки представлены в таблице:
| Блок | Что содержит | Пример |
| openapi | Версия спецификации | 3.1.0 |
| info | Название, описание, версия API, контакты | title: Pet Store API, version: 1.0.0, contact: email |
| servers | Базовые URL для разных окружений | dev, staging, prod |
| paths | Эндпоинты и HTTP-методы | GET /users, POST /orders |
| components | Повторно используемые схемы, параметры, ответы | Модели запросов и ответов (schemas), параметры (parameters) |
| security | Схемы авторизации | Bearer JWT, API Key |
| tags | Группировка эндпоинтов | По ресурсу или фиче (users, orders) |
Минимальная спецификация в YAML может выглядеть следующим образом:
openapi: 3.1.0
info:
title: Pet Store API
version: 1.0.0
description: Example API
servers:
- url: https://api.example.com/v1
paths: {}
В реальном проекте в paths описываются операции (GET, POST и т.д.), в components/schemas – модели данных, в security – требования к авторизации.
Вот как может выглядеть описание GET /users с параметрами, ответами и примерами:
paths:
/users:
get:
summary: Получить список пользователей
operationId: listUsers
tags:
- users
parameters:
- name: limit
in: query
schema:
type: integer
default: 20
description: Максимальное количество записей
- name: offset
in: query
schema:
type: integer
default: 0
description: Смещение для пагинации
responses:
'200':
description: Успешный ответ
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
example:
- id: 1
email: alice@example.com
name: Alice
'401':
description: Не авторизован
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
- Консистентность – это единые принципы именования (naming conventions) для путей, параметров, схем и полей. Это упрощает чтение спецификации и генерацию кода, делает API более предсказуемым для разработчиков.
- Повторное использование – все схемы, параметры, ответы выносятся в components и переиспользуются через $ref. Это уменьшает дублирование и упрощает поддержку, поскольку изменение в одном месте автоматически применяется во всех местах, где используется данная схема.
- Примеры – для каждого запроса и ответа нужны реалистичные примеры. Именно они помогают разработчикам интегрироваться, поскольку показывают, как выглядят реальные данные, а не просто описывают их структуру.
- Стандартизированные ошибки – единый формат ошибок для всех эндпоинтов: код, сообщение, детали валидации. Это упрощает обработку ошибок на стороне клиента и делает API более предсказуемым.
- Безопасность – все схемы безопасности описаны в components/securitySchemes, применяются глобально или на уровне операций. Это позволяет централизованно управлять требованиями к авторизации и упрощает аудит безопасности API.
Design-first vs Code-first: два подхода
Существует два основных подхода к работе с OpenAPI, каждый из которых имеет свои преимущества и недостатки.
При подходе Code-first спецификация генерируется из аннотаций в коде – Swagger Core, Springdoc. Плюс в том, что спецификация всегда синхронизирована с кодом: изменяется код – заново собирается документация. Минус в том, что описаний часто не хватает, примеры отсутствуют, читаемость низкая, бизнес-контекст теряется. Этот подход подходит для внутренних API, где документация не является приоритетом. Для публичных API подход code-first часто даёт недостаточно качественную документацию.
При подходе Design-first (Specification-first) спецификация пишется до кода, например, в редакторе Swagger Editor или Stoplight Studio. Плюс в том, что контракт согласован до начала разработки, возможна параллельная работа команд, описания и примеры подробные и продуманные. Минус в том, что требуется дисциплина и поддержка актуальности: если спецификацию не обновлять, она быстро устаревает. Этот подход требует больше усилий на начальном этапе, но окупается в долгосрочной перспективе за счёт более качественной документации.
Для документации, ориентированной на разработчиков, Design-first даёт лучший результат: спецификация становится настоящим контрактом, а не побочным продуктом кода. Это особенно важно для публичных API, где документация является частью продукта и влияет на опыт разработчиков.
На практике многие команды используют гибридный подход: спецификация пишется в Design-first, но в CI/CD встроена проверка, что код не отклоняется от спецификации. Это сочетает преимущества обоих подходов: подробные описания и актуальность, что делает его оптимальным выбором для большинства проектов.
Инструменты для работы с OpenAPI Specification
Инструментов для работы с OpenAPI много, и они охватывают все этапы взаимодействия со спецификацией – от написания до публикации. Основные категории описаны в таблице:
| Категория | Инструменты | Для чего |
| Редакторы | Swagger Editor, VS Code + расширения, Stoplight Studio | Написание и валидация спецификации, подсветка синтаксиса, автодополнение |
| Визуализация | Swagger UI, Redoc, Stoplight | Публикация интерактивной документации с «Try it out» |
| Валидация и линтинг | Spectral, vacuum | Проверка качества спецификации, соблюдение гайдлайнов, поиск ошибок |
| Кодогенерация | OpenAPI Generator, Swagger Codegen | Генерация клиентов, серверных заглушек, SDK на разных языках |
| Публикация | Документерра, Redocly | Финальная публикация документации, интеграция с порталом продукта |
Редакторы позволяют писать спецификацию с подсветкой, валидацией и предпросмотром, что упрощает работу и снижает количество ошибок. Визуализация превращает YAML/JSON в понятную интерактивную страницу, которую могут использовать разработчики для изучения API. Валидация позволяет найти ошибки до того, как они станут проблемой, что особенно важно в больших проектах. Кодогенерация экономит время на рутине, позволяя разработчикам сосредоточиться на бизнес-логике. Публикация делает документацию доступной для команды и внешних разработчиков, что упрощает интеграцию.
Практический стек для команды выглядит следующим образом: написание – VS Code с расширением OpenAPI (или Stoplight Studio) с линтингом через Spectral; валидация в CI – Spectral/vacuum проверяют спецификацию на ошибки, консистентность, наличие примеров; визуализация – Redoc или Swagger UI, развёрнутые на отдельном хосте или встроенные в портал; кодогенерация – OpenAPI Generator в CI для генерации SDK при каждом релизе; публикация – в системе управления документацией, такой как Документерра, которая выступает как единый портал, где API-документация существует совместно с концептуальной документацией.
OpenAPI Specification и документация продукта
OpenAPI Specification является важной, но лишь одной из составных частей общей документации продукта. Обычно в рабочем процессе сначала создаётся спецификация, на основе которой генерируются интерактивные справочники вроде Swagger UI или Redoc, предназначенные для разработчиков.
Затем эти материалы либо встраиваются непосредственно в портал Документерры, либо подключаются через ссылку. Когда разработчик заходит на портал, он видит концептуальные статьи и практические гайды, а описание API находится рядом в виде встроенного блока. Оно также может быть доступно по отдельной ссылке.
Однако у полностью автоматически сгенерированной документации есть свои ограничения: хотя все эндпоинты в ней подробно описаны, там отсутствуют обучающие руководства, практические примеры использования и вводные инструкции. Всё это по-прежнему пишется техническим писателем вручную. Документерра становится тем местом, где автогенерированная справочная информация по API соседствует с концептуальной документацией, пошаговыми туториалами и разделами с часто задаваемыми вопросами.
Техрайтер в обязательном порядке готовит следующие разделы:
- Getting started – руководство по получению ключа доступа, выполнению первого запроса и обработке ошибок.
- Use cases – описание типовых сценариев интеграции, например, создание заказа или подписка на вебхуки.
- Туториалы – подробные пошаговые инструкции с примерами кода на разных языках программирования.
- Changelog – история изменений API, включая описание breaking changes и инструкции по миграции.
- FAQ и troubleshooting (устранение неисправностей) – ответы на частые вопросы и рекомендации по диагностике ошибок.
Таким образом, автогенерированная документация (Swagger UI или Redoc) служит справочником по эндпоинтам, а ручная документация (туториалы и гайды) решает задачи онбординга и работы со сценариями. Обе части органично сосуществуют в Документерре, связаны между собой навигацией и единой системой поиска.
Частые ошибки при работе со спецификацией
При работе со спецификацией OpenAPI команды нередко допускают распространенные ошибки, которые снижают полезность документации и затрудняют интеграцию.
Описания параметров часто оказываются пустыми или сугубо формальными. Разработчик видит лишь тип данных, но не понимает, какое именно значение следует передавать. Ещё более критично отсутствие примеров запросов и ответов, ведь именно они дают разработчикам наглядное понимание того, как выглядит реальный рабочий запрос.
Спецификация не версионируется вместе с API. Это причина того, что при каждом обновлении теряется история изменений, клиенты перестают работать, а участники команды теряют представление о том, что именно поменялось.
Спецификация генерируется автоматически на основе кода, но никто не проверяет её на читаемость, полноту описаний и корректность примеров – ревью попросту отсутствует.
Вместо того чтобы строить API вокруг ресурсов, разработчики нередко используют глаголы в путях, например, создают эндпоинт /createUser вместо того, чтобы применить метод POST к ресурсу /users.
Кроме того, одна и та же модель дублируется в нескольких местах вместо того, чтобы быть вынесенной в раздел компонентов, а именование атрибутов страдает от разнобоя: в одном месте встречается userId, в другом – user_id, в третьем – idUser.
Обязательные поля не помечаются соответствующим образом, из-за чего генераторы кода и тестовых сценариев не могут определить, какие данные действительно необходимы. Примеры значений при этом нередко противоречат самой схеме, что приводит к падению валидации на этапе непрерывной интеграции.
Отсутствие идентификаторов операций не позволяет качественно выполнить генерацию SDK или порождает нечитаемые имена методов.
В спецификации описываются только успешные ответы и простые ошибки авторизации. Другие возможные статусы остаются без документации, и разработчики не знают, как обрабатывать эти ситуации.
Чтобы избежать перечисленных проблем, стоит встроить валидацию спецификации в процесс непрерывной интеграции с помощью специальных инструментов – они будут проверять файл при каждом коммите. Рекомендуется настроить обязательное наличие идентификаторов операций, содержательных примеров и описаний для всех эндпоинтов. Саму спецификацию имеет смысл ревьюить как обычный код: через запрос на слияние, с обязательной проверкой коллегами и последующим утверждением. И, конечно, важно версионировать спецификацию вместе с API, храня отдельные файлы для каждой версии.
* * *
OpenAPI Specification – это основа предсказуемого и качественно задокументированного API. Чем раньше спецификация появляется в процессе разработки, тем меньше вопросов к аналитику и техрайтеру на поздних этапах.
Спецификация становится единым контрактом, из которого автоматически строятся документация, моки, клиенты и тесты. На платформе Документерра спецификация существует совместно с концептуальной документацией, туториалами и гайдами, создавая целостную картину продукта для разработчиков.
ЧаВо
Swagger — это изначальное название формата, которое сейчас закрепилось за набором инструментов (Swagger UI, Swagger Editor, Swagger Codegen). OpenAPI Specification — официальное название самого стандарта начиная с версии 3.0. Проще говоря: спецификацию сегодня пишут по стандарту OpenAPI, а для работы с ней часто используют инструменты Swagger.
Однозначного ответа нет: Code-first быстрее синхронизируется с кодом и подходит для внутренних API, где документация не в приоритете. Design-first даёт более качественный контракт и подходит для публичных API, где документация — часть продукта. Многие команды используют гибридный подход: пишут спецификацию в Design-first, но проверяют в CI, что код ей соответствует.
Автогенерация экономит время, но не заменяет ручную работу техрайтера полностью. Автоматически сгенерированная спецификация обычно даёт скудные описания без бизнес-контекста и примеров. Getting started, use cases, туториалы и FAQ по-прежнему нужно писать вручную.
Для нового проекта имеет смысл сразу использовать актуальную версию 3.2 — она обратно совместима с 3.1 и не ломает существующий тулинг, но даёт больше возможностей (потоковые ответы, кастомные HTTP-методы, иерархические теги).
Спецификация закрывает справочную часть — описание эндпоинтов, параметров и ответов. Она не заменяет туториалы, getting started и use cases: это по-прежнему пишет техрайтер. В Документерре обе части — автогенерированный справочник и ручная документация — сосуществуют на одном портале и связаны общей навигацией и поиском.

