📘 Swagger (OpenAPI)
Структура спецификации OpenAPI 3: пути, параметры, схемы, ответы, безопасность.
Шпаргалки · Аналитика · #openapi #swagger #api #documentation
Что это
OpenAPI это стандарт описания REST API в YAML или JSON. Swagger название набора инструментов: Swagger UI (документация в браузере), Swagger Editor, Swagger Codegen. По спецификации генерируют документацию, клиентов, серверные заглушки и тесты.
Каркас
openapi: 3.0.3
info:
title: Shop API
version: 1.0.0
servers:
- url: https://api.example.com/v1
tags:
- name: users
paths:
/users:
get:
tags: [users]
summary: Список пользователей
parameters:
- name: limit
in: query
schema: { type: integer, default: 20, maximum: 100 }
responses:
'200':
description: Успешно
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/User' }
post:
tags: [users]
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/NewUser' }
responses:
'201': { description: Создан }
'422': { $ref: '#/components/responses/ValidationError' }
/users/{id}:
get:
parameters:
- name: id
in: path
required: true
schema: { type: integer }
responses:
'200':
description: Пользователь
content:
application/json:
schema: { $ref: '#/components/schemas/User' }
'404': { description: Не найден }
components:
schemas:
User:
type: object
required: [id, email]
properties:
id: { type: integer, example: 42 }
email: { type: string, format: email }
role: { type: string, enum: [admin, user] }
NewUser:
type: object
required: [email]
properties:
email: { type: string, format: email }
responses:
ValidationError:
description: Ошибка валидации
securitySchemes:
bearerAuth: { type: http, scheme: bearer, bearerFormat: JWT }
security:
- bearerAuth: []
Типы данных
string (форматы date, date-time, email, uuid, uri), integer (int32, int64), number, boolean, array, object. Ограничения: minLength, maxLength, pattern, minimum, maximum, enum, nullable.
Где применяется параметр (in)
path, query, header, cookie. Тело описывается в requestBody.
Композиция схем
allOf (все), oneOf (одна из), anyOf (любая), $ref (ссылка на компонент).
Инструменты
| Задача | Инструмент |
|---|---|
| Редактирование | Swagger Editor, Stoplight, VS Code |
| Документация | Swagger UI, Redoc |
| Проверка | Spectral, openapi-validator |
| Клиенты и серверы | OpenAPI Generator |
| Тесты | Postman (импорт), Schemathesis |
| Mock-сервер | Prism |
Подход
- Design first: сначала спецификация, потом код.
- Code first: спецификация генерируется из кода (springdoc, FastAPI, NestJS Swagger).
Совет: Давайте
exampleу полей и описания у кодов ошибок: по ним пишут тесты и интеграции.