Открыть сервис

OpenAPI

OpenAPI — это спецификация (стандарт) для описания, создания, документирования и использования RESTful API (интерфейсов прикладного программирования). Она представляет собой машиночитаемый формат на основе JSON или YAML, который позволяет разработчикам, системам и инструментам единообразно описывать функциональность веб-сервиса, включая доступные конечные точки (endpoints), форматы запросов и ответов, методы аутентификации, параметры и модели данных. OpenAPI является одной из наиболее распространённых реализаций концепции «спецификации интерфейса» (Interface Description Language, IDL) для HTTP-сервисов.

История

Предшественники и создание Swagger

Истоки OpenAPI лежат в проекте Swagger, созданном в 2010 году компанией Reverb Technologies (изначально — Wordnik) под руководством Тони Тэма (Tony Tam). Swagger задумывался как инструмент для документирования REST API, который позволял бы автоматически генерировать интерактивную документацию и клиентские библиотеки. Первая версия спецификации Swagger (версия 1.0) была выпущена в 2011 году. Она описывала базовые элементы: пути, операции, параметры, модели и схемы аутентификации.

К 2014 году Swagger стал де-факто стандартом для документирования API в индустрии. Однако его развитие контролировалось одной компанией (Reverb Technologies, позже переименованной в SmartBear Software), что вызывало опасения сообщества относительно vendor lock-in.

Переход к OpenAPI Initiative

В 2015 году SmartBear Software передала спецификацию Swagger в управление некоммерческой организации OpenAPI Initiative (OAI), созданной при поддержке Linux Foundation. В состав OAI вошли такие компании, как Google, Microsoft, IBM, PayPal, Capital One и другие. Спецификация была переименована в OpenAPI Specification (OAS). Первая версия под новым именем, OpenAPI 2.0, была выпущена в 2015 году и фактически дублировала Swagger 2.0. Этот шаг обеспечил независимость стандарта и его открытое развитие.

Версия 3.0 и дальнейшее развитие

В 2017 году была выпущена OpenAPI 3.0 — кардинально переработанная версия спецификации. Она включала множество улучшений: поддержку callback-вызовов (вебхуков), более гибкую систему описания типов данных (на основе JSON Schema), возможность описывать несколько серверов для одного API, а также улучшенную поддержку аутентификации и безопасности. OpenAPI 3.0 стала значительным шагом вперёд по сравнению с версией 2.0.

В 2021 году вышла OpenAPI 3.1, которая полностью интегрировала JSON Schema 2020-12, что позволило использовать все возможности этой схемы для описания данных. Это также упростило валидацию и генерацию кода. На момент 2024 года OpenAPI 3.1 является последней стабильной версией спецификации, хотя сообщество продолжает работу над её развитием.

Структура и компоненты спецификации

Спецификация OpenAPI представляет собой структурированный документ, который может быть записан в формате JSON или YAML. Основные разделы (поля) документа:

Metadata (информация о самом API)

  • openapi: версия спецификации (например, «3.1.0»).
  • info: метаданные API — название, версия, описание, контактная информация, лицензия.
  • servers: список серверов (базовых URL), на которых размещён API. Позволяет указать несколько окружений (продакшн, тестовый, локальный).

Paths (конечные точки)

  • paths: основной раздел, содержащий описание всех доступных путей (endpoints) API. Каждый путь (например, /users или /users/{id}) содержит одну или несколько операций (HTTP-методов: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS).
  • Каждая операция описывает:
  • parameters: параметры запроса (path, query, header, cookie).
  • requestBody: тело запроса (для POST, PUT, PATCH).
  • responses: возможные ответы сервера (коды HTTP, структура данных, заголовки).
  • security: требования к аутентификации для данной операции.
  • summary и description: краткое и полное описание операции.

Components (повторно используемые компоненты)

  • schemas: определения моделей данных (на основе JSON Schema). Позволяет описывать типы объектов, их свойства, обязательные поля, ограничения.
  • responses: повторно используемые ответы.
  • parameters: повторно используемые параметры.
  • examples: примеры запросов и ответов.
  • requestBodies: повторно используемые тела запросов.
  • headers: повторно используемые заголовки.
  • securitySchemes: схемы аутентификации (API key, HTTP Basic, OAuth2, OpenID Connect, Bearer token и т.д.).
  • links: механизм для описания связей между операциями (HATEOAS-подобное поведение).
  • callbacks: описание callback-вызовов (вебхуков), которые API может инициировать.

Security (глобальные требования безопасности)

  • security: глобальные требования к аутентификации, которые применяются ко всем операциям, если не переопределены на уровне конкретной операции.

Tags (теги)

  • tags: метки для группировки операций по логическим категориям (например, «Пользователи», «Заказы», «Платежи»). Используются для структурирования документации.

External Documentation (внешняя документация)

  • externalDocs: ссылки на дополнительную документацию (руководства, туториалы, политики).

Применение

Документирование API

Основное и самое распространённое применение OpenAPI — автоматическая генерация интерактивной документации. Инструменты, такие как Swagger UI, ReDoc, Stoplight Elements, читают спецификацию и создают веб-страницу, на которой разработчики могут просматривать все конечные точки, параметры, модели данных и даже отправлять тестовые запросы прямо из браузера. Это значительно упрощает понимание и использование API.

Генерация кода

Спецификация OpenAPI может служить исходным кодом для генерации:

  • Клиентских библиотек (SDK): инструменты (OpenAPI Generator, Swagger Codegen) автоматически создают код на различных языках программирования (Java, Python, JavaScript, C#, Go, Ruby, PHP, TypeScript и др.), который позволяет вызывать API без ручного написания HTTP-запросов.
  • Серверного каркаса (stub/server skeleton): генерация шаблонного кода для серверной части, включая обработчики запросов, валидацию входных данных и формирование ответов. Это ускоряет разработку серверной логики.

Тестирование и валидация

  • Автоматическое тестирование: спецификация используется для генерации тестовых сценариев, проверки соответствия реализованного API заявленному поведению. Инструменты (например, Dredd, Postman, ReadyAPI) могут выполнять запросы к API и сравнивать ответы с ожидаемыми, описанными в спецификации.
  • Валидация запросов и ответов: на основе схемы данных (JSON Schema) из спецификации можно проверять, соответствуют ли входящие запросы и исходящие ответы заданным форматам. Это позволяет отлавливать ошибки на ранних этапах.

Интеграция и автоматизация

  • API-шлюзы и прокси: некоторые API-шлюзы (например, Kong, Tyk, Azure API Management) могут импортировать спецификацию OpenAPI для автоматической настройки маршрутизации, валидации, ограничения скорости и других политик.
  • Непрерывная интеграция (CI/CD): спецификация может быть частью пайплайна разработки, обеспечивая автоматическую проверку совместимости изменений, генерацию документации и уведомление команд о breaking changes.

Инструменты и экосистема

Вокруг OpenAPI сложилась обширная экосистема инструментов:

  • Swagger UI — самый популярный инструмент для визуализации спецификации в виде интерактивной документации.
  • Swagger Editor — онлайн-редактор для написания и валидации спецификаций.
  • OpenAPI Generator — основной инструмент для генерации кода (клиентских и серверных библиотек) на десятках языков.
  • ReDoc — альтернативный генератор документации с фокусом на читаемость и производительность.
  • Stoplight — коммерческая платформа для проектирования, документирования и тестирования API, поддерживающая OpenAPI.
  • Postman — популярный инструмент для тестирования API, который может импортировать и экспортировать спецификации OpenAPI.
  • Insomnia — аналогичный инструмент с поддержкой OpenAPI.
  • Spectralлинтер для проверки качества и соответствия стандартам спецификаций OpenAPI.
  • Prism — инструмент для мок-серверов, генерирующий фиктивные ответы на основе спецификации.

Критика и ограничения

Несмотря на широкое распространение, OpenAPI имеет ряд критических замечаний:

  • Сложность и объём: спецификация, особенно версии 3.0 и 3.1, может быть громоздкой и сложной для написания вручную. Для больших API с множеством конечных точек и моделей данных документ становится трудночитаемым.
  • Избыточность для простых API: для небольших сервисов с несколькими эндпоинтами использование полной спецификации может быть избыточным.
  • Проблемы с версионированием: управление изменениями в спецификации (breaking changes) и синхронизация с реальным кодом остаются сложными задачами. Не всегда удаётся автоматически определить, является ли изменение обратно совместимым.
  • Неполнота описания бизнес-логики: OpenAPI описывает только синтаксис и структуру API, но не его семантику, бизнес-правила, порядок вызова операций или ограничения, связанные с состоянием.
  • Зависимость от инструментов: качество документации и кода, генерируемых из спецификации, сильно зависит от используемых инструментов. Некоторые генераторы могут создавать неоптимальный или небезопасный код.

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

OpenAPI не является единственным стандартом для описания API. Основные альтернативы:

  • RAML (RESTful API Modeling Language): разработан MuleSoft; более строгий и формальный язык, ориентированный на проектирование API сверху вниз. Менее распространён, чем OpenAPI.
  • API Blueprint: простой язык на основе Markdown, ориентированный на читаемость для человека. Уступает OpenAPI по функциональности и поддержке инструментов.
  • GraphQL (схема): не является спецификацией REST API, а представляет собой альтернативный протокол. Схема GraphQL описывает типы данных и запросы, но не конечные точки и HTTP-методы.
  • gRPC (Protobuf): использует Protocol Buffers для описания сервисов и сообщений. Предназначен для высокопроизводительных RPC-систем, а не для REST.

OpenAPI остаётся доминирующим стандартом для REST API благодаря своей зрелости, широкой поддержке инструментов и активному сообществу.

Источники

  • OpenAPI Specification, версия 3.1.0 (OpenAPI Initiative, Linux Foundation)
  • Swagger Documentation (SmartBear Software)
  • «REST API Design Rulebook» (Mark Masse)
  • «API Design Patterns» (JJ Geewax)
  • Документация OpenAPI Generator
  • Статьи и руководства на сайте OpenAPI Initiative

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →