**Шаг 1: Структура и читаемость — основа основ.**
Первое правило мастера: документация должна быть удобна для человека, а не только для машины. Используйте инструменты для визуализации, такие как Swagger UI или ReDoc, но подготовьте для них правильную основу.
- Разделяй и властвуй: Не храните всю спецификацию в одном гигантском `openapi.yaml`. Разбейте ее на логические модули с помощью `$ref`. Вынесите схемы данных (schemas) в `/components/schemas/`, параметры — в `/components/parameters/`, примеры ответов — в `/components/examples/`. Это упростит навигацию и повторное использование.
- Ясные описания (description): Не оставляйте поля `description` пустыми. Пишите кратко, но содержательно. Для сложных полей укажите бизнес-логику, примеры значений, возможные ограничения. Используйте Markdown для форматирования: списки, `code blocks`.
- Группировка операций (tags): Используйте поле `tags` для логической группировки эндпоинтов (например, `Users`, `Orders`, `Reports`). В Swagger UI это превратится в удобные разделы. Упорядочивайте теги с помощью `x-tag-order` расширения для красивого отображения.
Документация — это закон. Она должна быть максимально точной.
- Полнота ответов: Описывайте ВСЕ возможные HTTP-статусы для каждого эндпоинта, особенно ошибки (400, 401, 403, 404, 422, 500). Для каждого статуса указывайте схему ответа. Не ограничивайтесь только `200 OK` и `500 Internal Server Error`.
- Валидация через схему: Максимально строго описывайте схемы запросов и ответов, используя `type`, `format`, `pattern`, `enum`, `minLength`/`maxLength`, `minimum`/`maximum`. Это не только проинформирует разработчика, но и позволит использовать инструменты автоматической валидации входящих запросов (например, `express-openapi-validator`).
- Примеры (examples) — ваш лучший друг: Сухое описание поля `string` не сравнится с наглядным примером. Добавляйте `example` или `examples` на уровне схем и операций. Покажите реальный JSON-запрос и ответ. Это сократит время на «угадывание» формата данных.
- Явное объявление схем безопасности: В корне документа в `components/securitySchemes` четко опишите используемые методы: `Bearer` (JWT), `OAuth2`, `API Key`. Затем для каждого эндпоинта в `security` укажите, какая схема требуется. Если эндпоинт публичный, явно пропишите `security: []`.
- Scopes для OAuth2: Если используется OAuth2, детально опишите `scopes` и укажите, какие scope необходимы для каждого защищенного эндпоинта.
Мастера не обновляют документацию вручную.
- Генерация из кода: Используйте инструменты, которые генерируют OpenAPI-спецификацию из аннотаций в коде (например, `swagger-jsdoc` для Node.js, `Springfox` или `Springdoc` для Java, `Swashbuckle` для .NET). Это гарантирует, что документация всегда соответствует актуальной кодовой базе.
- Валидация спецификации: Интегрируйте проверку вашего `openapi.yaml` в CI/CD пайплайн с помощью `swagger-cli validate` или `Speccy`. Это поймает синтаксические ошибки до деплоя.
- «Живой» Sandbox: Настройте Swagger UI так, чтобы можно было отправлять реальные запросы к вашему API прямо из интерфейса документации. Для этого правильно укажите `servers` (или `host`, `basePath` в OpenAPI 2.0) и, если нужно, настройте работу с авторизацией (кнопка «Authorize» в Swagger UI).
- Расширения (Vendor Extensions): Используйте `x-*` расширения для добавления информации, не покрытой стандартом. Например, `x-logo` для добавления логотипа в UI, `x-rate-limit` для описания лимитов запросов, `x-internal` для пометки внутренних эндпоинтов.
- Deprecation: Помечайте устаревшие эндпоинты или поля с помощью `deprecated: true`. Укажите в `description`, на что их следует заменить и сроки отключения.
- Версионирование API: Четко отражайте версию API в спецификации (в `info.version`) и в самом `servers.url` (например, `https://api.example.com/v1`). Рассмотрите использование `URL versioning` или `Header versioning`, и документируйте этот выбор.
Комментарии (9)