OpenAPI Specification (OAS): полное руководство для техрайтеров и разработчиков | Документерра

OpenAPI Specification (OAS): полное руководство для техрайтеров и разработчиков

Эльмира Аббясова
Эльмира АббясоваКонтент-эксперт
Эльмира Аббясова
Эльмира Аббясова
Контент-эксперт

Рассказываю о сложных вещах простым и понятным языком, превращая сложный контент в интересные и полезные материалы для читателей.
15+ лет переводов технических текстов, 5+ лет в сфере технического писательства.

25.08.2026
16 минут

В современных условиях API перестали быть исключительно внутренним инструментом: их используют мобильные приложения, партнёры, внешние разработчики и даже AI-агенты. Плохая спецификация в такой ситуации означает реальную блокировку интеграций, рост количества обращений в службу поддержки, ошибки и задержки релизов.

OpenAPI Specification (OAS): полное руководство для техрайтеров и разработчиков

Когда команда разрабатывает 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 и OpenAPI Specification?

Swagger — это изначальное название формата, которое сейчас закрепилось за набором инструментов (Swagger UI, Swagger Editor, Swagger Codegen). OpenAPI Specification — официальное название самого стандарта начиная с версии 3.0. Проще говоря: спецификацию сегодня пишут по стандарту OpenAPI, а для работы с ней часто используют инструменты Swagger.

Что лучше — Design-first или Code-first?

Однозначного ответа нет: Code-first быстрее синхронизируется с кодом и подходит для внутренних API, где документация не в приоритете. Design-first даёт более качественный контракт и подходит для публичных API, где документация — часть продукта. Многие команды используют гибридный подход: пишут спецификацию в Design-first, но проверяют в CI, что код ей соответствует.

Нужно ли писать спецификацию вручную, если есть автогенерация из кода?

Автогенерация экономит время, но не заменяет ручную работу техрайтера полностью. Автоматически сгенерированная спецификация обычно даёт скудные описания без бизнес-контекста и примеров. Getting started, use cases, туториалы и FAQ по-прежнему нужно писать вручную.

Какую версию OpenAPI использовать для нового проекта?

Для нового проекта имеет смысл сразу использовать актуальную версию 3.2 — она обратно совместима с 3.1 и не ломает существующий тулинг, но даёт больше возможностей (потоковые ответы, кастомные HTTP-методы, иерархические теги).

Как OpenAPI-документация сочетается с обычной документацией продукта?

Спецификация закрывает справочную часть — описание эндпоинтов, параметров и ответов. Она не заменяет туториалы, getting started и use cases: это по-прежнему пишет техрайтер. В Документерре обе части — автогенерированный справочник и ручная документация — сосуществуют на одном портале и связаны общей навигацией и поиском.

Нажимая кнопку, вы соглашаетесь с условиями обработки cookie-файлов и ваших данных о поведении на сайте, необходимых для аналитики. Запретить обработку cookie-файлов вы можете через настройки браузера.