Swagger / OpenAPI
OpenAPI — стандарт машиночитаемого описания HTTP-API, Swagger — набор инструментов вокруг него: интерактивная документация, редактор и генератор кода.
Что такое Swagger и OpenAPI
OpenAPI — формат описания HTTP-API: один файл в YAML или JSON, где перечислены все эндпоинты, методы, параметры, схемы запросов и ответов, коды ошибок и способ авторизации. Файл машиночитаемый, поэтому по нему генерируют документацию, клиентов и тесты.
Swagger — набор инструментов, работающих с этим файлом: Swagger UI (интерактивная документация в браузере), Swagger Editor (редактор с валидацией), Swagger Codegen (генератор кода).
Путаница в названиях историческая: формат родился как Swagger Specification, затем был передан в OpenAPI Initiative и переименован в OpenAPI — версия Swagger 2.0 стала предшественницей OpenAPI 3.x. Сегодня строго: OpenAPI — это спецификация, Swagger — инструменты. В разговоре «сваггер» обычно означает ту самую страницу с документацией, где можно нажать Try it out.
Как выглядит спецификация
openapi: 3.0.3
info:
title: Weather API
version: 1.0.0
servers:
- url: https://api.example.com/v1
paths:
/cities/{city}/weather:
get:
summary: Погода в городе
parameters:
- name: city
in: path
required: true
schema: { type: string }
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Weather'
'404':
description: Город не найден
components:
schemas:
Weather:
type: object
required: [city, temperature_c]
properties:
city: { type: string }
temperature_c: { type: number }
Из этих 30 строк получается и страница документации, и клиентская библиотека, и проверка ответов в тестах.
Зачем это нужно на практике
- Документация не врёт. Спецификация лежит рядом с кодом и правится в том же коммите — в отличие от вики, которая устаревает за месяц.
- Кодогенерация.
openapi-generatorсобирает клиента для нужного языка и мок-сервер с примерами ответов. - Contract-first. Фронтенд и бэкенд договариваются о схеме заранее и работают параллельно, а не ждут друг друга.
- Валидация в CI. Тест проверяет, что реальные ответы сервиса соответствуют схеме.
Два подхода к спецификации
| Подход | Как получается файл | Плюсы | Минусы |
|---|---|---|---|
| Code-first | генерируется из кода и аннотаций | всегда синхронна с реализацией | описание API диктуется кодом |
| Design-first | пишется руками, код по ней | контракт согласуют до разработки | нужна дисциплина, чтобы не разъехалось |
Многие фреймворки отдают спецификацию сами: FastAPI на Python публикует Swagger UI по /docs и сам файл по /openapi.json без единой строчки настройки.
Поднять Swagger UI
docker run -p 8080:8080 \
-e SWAGGER_JSON=/spec/openapi.yaml \
-v $(pwd):/spec \
swaggerapi/swagger-ui
Открывается http://localhost:8080 с интерактивной документацией. В Docker Compose такой контейнер часто ставят рядом с сервисом на dev-окружении.
Отдавать Swagger UI наружу вместе с production-API стоит осознанно: страница показывает все эндпоинты и структуру данных. Если API внутренний, документацию закрывают авторизацией или оставляют только в закрытом контуре — сама спецификация при этом остаётся в репозитории.
Связанные термины
- API — то, что описывает спецификация
- REST API — стиль API, под который заточен OpenAPI
- API endpoint — единица описания в разделе paths
- HTTP-ошибки — коды ответов, перечисляемые в responses
- CI/CD — где проверяют соответствие API спецификации
Готовы запустить GPU-задачу?
Запустить GPU-сервер