GH GambleHub

Документация API: OpenAPI, Swagger, Postman

TL;DR

OpenAPI — источник истины: контракт → SDK → моки → тесты → портал.
Swagger UI/Redoc — читаемая витрина; Postman — исполняемые сценарии.
Вшиваем линтеры, breaking-checks, примеры и схемы ошибок, генерим SDK и Mock-серверы, публикуем дев-портал с версионированием и «Sunset».

1) Цели и принципы

Контракт один (OpenAPI). Все остальное генерируется.
Документация исполняема: примеры запросов тестируемы в Postman/CLI.
Безопасность по умолчанию: схемы ошибок, лимитов, аутентификации.
Версионирование и жизненный цикл: `v1`/`v2`, Deprecation/Sunset, changelog.

2) Структура OpenAPI (минимальный скелет)

yaml openapi: 3. 0. 3 info:
title: Payments API version: 1. 2. 0 description: >
Payment transactions: auth/capture/refund/payout. All responses contain trace_id.
servers:
- url: https://api. example. com/v1 tags:
- name: Payments
- name: Payouts components:
securitySchemes:
oauth2:
type: oauth2 flows:
clientCredentials:
tokenUrl: https://idp. example. com/oauth/token scopes:
payments: read: read payments: write: write payments schemas:
Error:
type: object required: [error, error_description, trace_id]
properties:
error: { type: string }
error_description: { type: string }
trace_id: { type: string, format: uuid }
security:
- oauth2: [payments:read]
paths:
/payments/{id}:
get:
summary: Receive payment tags: [Payments]
parameters:
- in: path name: id required: true schema: { type: string, format: uuid }
responses:
'200':
description: Content succeeded:
application/json:
schema: { $ref: '#/components/schemas/Payment' }
'404': { $ref: '#/components/responses/NotFound' }
components:
responses:
NotFound:
description: Content not found:
application/json:
schema: { $ref: '#/components/schemas/Error' }
Советы:
  • Раскладывайте schemas/responses/parameters/requestBodies в `components`.
  • Описывайте securitySchemes (OAuth2/JWT/HMAC) и применяйте на уровне `paths`/`global`.

3) Стандарт ошибок и метаданные

Единый объект ошибки (и для REST, и для вебхуков):
yaml components:
schemas:
ApiError:
type: object required: [error, error_description, trace_id]
properties:
error: { enum: [invalid_request, not_found, rate_limited, internal] }
error_description: { type: string }
trace_id: { type: string, format: uuid }

Всегда документируйте 429 (rate limit), 401/403, и заголовки `X-RateLimit-`, `Retry-After`.

4) Примеры: request/response, curl и SDK

Для каждого эндпоинта: минимальный и расширенный пример.
Генерируйте curl и код-сниппеты (JS/Python/Go) из OpenAPI; не пишите руками.
Прикладывайте реальные значения: UUID, ISO-дату, суммы в «минорных» (cents).

Пример расширенного ответа:
yaml examples:
ok:
value:
id: "pay_123"
amount_minor: 1099 currency: "EUR"
status: "captured"
created_at: "2025-11-03T12:34:56Z"

5) Swagger UI / Redoc — как публиковать

Хостите две витрины:

1. Swagger UI (интерактив, try-it-out),

2. Redoc (читабельные длинные страницы).

Включайте: темную тему, поиск, версионный селектор (`v1`, `v2`), баннер Deprecation.

Скройте «Try it out» для прод-домена, разрешите на sandbox.

6) Postman-коллекции: живые сценарии

Автогенерируйте коллекцию из OpenAPI и поддерживайте переменные окружений (`{{baseUrl}}`, `{{accessToken}}`).
Добавьте претесты (получение токена) и пост-тесты (assert статуса/схем).
Разбейте по папкам: Auth, Payments, Payouts, Webhooks.
Экспортируйте мониторы (по расписанию) для критичных маршрутов.

Шаблон теста:
js pm. test("status is 200", () => pm. response. code === 200);
pm. test("schema valid", () => tv4. validate(pm. response. json(), pm. collectionVariables. get("schema_payment")));

7) Моки и сэндбокс

Генерируйте mock-сервер из OpenAPI (по примерам/`example`/`examples`).
Обозначьте ограничения моков: идемпотентность, задержки, случайные ошибки (для UAT).
Документируйте отличия sandbox vs prod (лимиты, данные, задержки).

8) Автогенерация SDK

Из OpenAPI генерируйте официальные SDK (TypeScript, Python, Go).
Политика релизов SDK = SemVer, маппинг на версию API.
В README SDK: аутентификация, ретраи, идемпотентность, обработка 429/Retry-After.

9) Линтинг, проверка ломаний и CI

Линтеры: spectral (стили/анти-паттерны), openapi-diff (breaking-checks).

CI:
  • валидатор схемы,
  • линтер,
  • contract tests против мок-сервера,
  • сборка Swagger/Redoc/коллекции,
  • публикация на портал (staging→prod),
  • оповещение о Deprecation/Sunset.

10) Версионирование, Deprecation, Sunset

Версия в URI (`/v1`) и в `info.version`.
Флаги устаревания: заголовки `Deprecation: true`, `Sunset: <RFC1123 date>`, `Link: <changelog>`.
В портале — баннер и таймер до отключения; Postman-коллекции для v1 заморожены (только багфиксы).

11) Безопасность и приватность в доке

Не публикуйте секреты, внутренние URL, реальные PAN/PII.
Для чувствительных полей — маскировка и примеры-заглушки.
Swagger «Try it out» → только к sandbox, с rate-limits.
Четко описывайте OAuth2/OIDC, HMAC (для вебхуков) и mTLS (если требуется).

12) Стайл-гайд контрактов

Ресурсы во множественном числе: `/payments`, `/payouts`.
Идентификаторы: `pay_`, `po_`, UUIDv4 или ksuid.
Даты — UTC ISO-8601; деньги — `amount_minor + currency`.
Пагинация — cursor-based (`?cursor=&limit=`), стабильные сортировки.
Идемпотентность — `Idempotency-Key` для мутаций.
Стабильный объект `meta` и `links` для списков.

13) Раздел «Webhooks» в доке

Отдельный раздел с конвертом события, подписями HMAC, окном времени, ретраями, кодами ответов.
Примеры тел событий и коллекция Postman для локальной проверки подписи.
Эндпоинты replay/DLQ и чек-лист UAT.

14) Дев-портал: роли и публикация

Разделы: Обзор, Начало работы, Аутентификация, Эндпоинты, Примеры, Вебхуки, SDK, Ограничения, Changelog.
Роли: API Steward (стандарты), Domain Owner (контент), Tech Writer (редактура), DevRel (портал/сообщество).
Фича: поиск по полям схем, копирование сэмплов, «собрать запрос» → Postman.

15) Чек-листы

Перед релизом:
  • OpenAPI валиден; линтер без ошибок.
  • Примеры покрывают 200/4xx/429/5xx.
  • Безопасность: описаны схемы auth, нет секретов.
  • Сформированы Swagger/Redoc и Postman (prod/sandbox).
  • Сгенерированы SDK и опубликованы.
  • Обновлены changelog и версионный селектор.
Для Deprecation:
  • Заголовки Deprecation/Sunset включены.
  • Баннер в портале, письма партнерам.
  • Метрики вызовов устаревшей версии падают к целевому уровню.

16) Анти-паттерны

Дублирующие источники истины (вики ≠ OpenAPI).
Примеры «на глаз» без запуска в Postman.
Отсутствие единого формата ошибок.
Версия «в query-параметре» вместо URI/домена.
Swagger с доступом в прод и без лимитов.
Несогласованная пагинация и схемы аутентификации.

17) Мини-сниппеты автоматизации

Генерация коллекции Postman из OpenAPI (псевдо):
bash openapi2postmanv2 -s openapi. yaml -o postman. json -p
Публикация портала (CI шаги, псевдо-YAML):
yaml steps:
- run: spectral lint openapi. yaml
- run: openapi-diff --fail-on-breaking main. yaml openapi. yaml
- run: redoc-cli bundle openapi. yaml -o site/redoc. html
- run: swagger-cli bundle openapi. yaml -o site/swagger. json
- run: openapi2postmanv2 -s openapi. yaml -o site/postman. json -p
- run: npm run deploy:portal

18) Локализация и доступность

Отдельные `info.description_<lang>` или две сборки портала (EN/RU).
Термины в глоссарии (KYC/AML, payout, idempotency).
Контраст, клавиатурная навигация, темная тема.

Резюме

Соберите конвейер документации: единый OpenAPI-контракт → линтеры и breaking-checks → Swagger/Redoc витрины → Postman коллекции и мок-сервер → SDK → дев-портал с версионированием и Sunset. Регулярные примеры, единый формат ошибок и строгая аутентификация превратят документацию из «PDF на полке» в рабочий инструмент интеграций, ускоряя партнеров и снижая стоимость поддержки.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.