OpenAPI Specification v3.2.0: определение — «programming language-agnostic interface description for HTTP APIs». Клик — увеличить.
39OpenAPI 3.2 и OpenAPI 3.1 — не одно и то же
Спецификация развивается, а фреймворки поддерживают её редакции с задержкой.
последняя редакция OAS3.2.1
опубликована 10 сентября 2026 года
генерирует FastAPI 0.1153.1.0
поле openapi в /openapi.json
Минорная версия 3.2 вышла 19 сентября 2025 года (3.2.0), а 10 сентября 2026 года опубликовано исправление 3.2.1. При этом FastAPI по умолчанию генерирует:
{
"openapi": "3.1.0"
}
Это не означает, что API «неправильный». Framework может поддерживать не самую новую опубликованную версию спецификации.
spec.openapis.org · latestСКРИНШОТ · 15.09.2026
Страница последней редакции: OpenAPI Specification v3.2.1, Published 10 September 2026. Клик — увеличить.
40Swagger и OpenAPI нельзя считать синонимами
Путаница историческая: до 2016 года спецификация называлась Swagger Specification.
формат
OpenAPI Specification
Стандарт описания API. Развивается OpenAPI Initiative. Файл openapi.json или openapi.yaml — документ в этом формате.
инструменты
Swagger
Набор инструментов компании SmartBear, которые работают с документами OpenAPI: редактор, интерфейс документации, генераторы кода.
Документация Swagger прямо разделяет эти понятия: OpenAPI — спецификация, Swagger — инструменты для работы с ней.
41Что входит в экосистему Swagger
Каждый инструмент решает свою задачу, и все читают один и тот же документ OpenAPI.
Инструмент
Назначение
Swagger Editor
редактирование описания с проверкой в реальном времени
Swagger UI
интерактивная документация в браузере
Swagger Codegen
генерация клиентов и заготовок сервера
Swagger Core
получение описания из Java-кода
Swagger Parser
разбор и валидация документа OpenAPI
Для нашего занятия особенно важен Swagger UI: он читает OpenAPI schema и строит страницу, с которой можно отправлять запросы.
openapi.json
Swagger UI
interactive documentation
42OpenAPI document имеет стандартную структуру
Каждая часть верхнего уровня отвечает за отдельный слой API contract.
Это особенно важно при разделении production и test environments: Swagger UI покажет список серверов, и тестовый запрос не уйдёт случайно в боевую систему.
45Endpoints необходимо группировать
Большой API нельзя оставлять одной длинной лентой операций.
Группы называются по предметной области:
Tickets
Users
Authentication
Reports
В FastAPI группа задаётся параметром tags роутера:
paths
├── /tickets
│ ├── GET
│ └── POST
└── /tickets/{ticket_id}
├── GET
├── PATCH
└── DELETE
По paths видна вся структура HTTP interface: какие ресурсы есть и что с каждым можно сделать.
47Каждый method внутри path — отдельная operation
Operation — это описание одного метода на одном адресе.
operation
post:
summary: Создать обращение
description: Регистрирует новое обращение
operationId: createTicket
tags: [Tickets]
parameters: []
requestBody: ...
responses: ...
Поле
Назначение
summary
короткое название в списке
description
подробное объяснение
operationId
уникальный идентификатор операции
tags
группа
parameters
параметры пути, query, заголовков
requestBody
тело запроса
responses
возможные ответы
operationId должен быть уникальным и желательно стабильным: генераторы SDK превращают его в имя метода, например client.createTicket().
48OpenAPI различает расположение параметров
Параметр может находиться в одном из четырёх мест HTTP-запроса. Поле in указывает, в каком.
HTTP request
GET /api/v1/tickets/{ticket_id}?limit=20Authorization: Bearer TOKENCookie: session=abc
in
Пример
path
ticket_id
query
limit
header
Authorization — в OpenAPI описывается через security
cookie
session
Зная место параметра, Swagger UI и сгенерированные клиенты сами собирают правильный запрос.
49Body тоже имеет формальную схему
Для POST /tickets контракт описывает, какое тело клиент обязан прислать.
POST /tickets
{
"title": "Не работает VPN",
"description": "Ошибка подключения"
}
OpenAPI описывает:
media type;
schema;
required fields;
types;
validation;
examples.
requestBody
application/json
TicketCreateсхема в components
В учебном проекте title обязателен и содержит от 3 до 120 символов. Запрос без него получит 422 ещё до вызова функции.
50Документируется не только успешный ответ
Клиенту нужно знать все ответы, которые он может получить, иначе он не напишет их обработку.
Для GET /tickets/{ticket_id} недостаточно описать только 200. Контракт должен учитывать:
200OK
404Not Found
422Validation Error
Для защищённого endpoint также:
401Unauthorized
403Forbidden
REQUEST
├─ 200
├─ 401
├─ 404
└─ 422
51Повторяющиеся схемы следует переиспользовать
Вместо копирования одной модели во все operations OpenAPI позволяет создать reusable components.