МойСклад OpenAPI Спецификация
July 29, 2026 · View on GitHub
Модульная OpenAPI 3.0.3 спецификация для МойСклад JSON API 1.2
Быстрый старт
Тестировалось на версии nvm v24.0.1
nvm use v24.0.1
npm run generate-php
1. Установка зависимостей
npm install
2. Валидация спецификации
npm run validate
3. Генерация документации
npm run docs
4. Локальный просмотр документации
npm run serve-docs
5. Генерация клиентских SDK
npm run generate-php
Локальный запуск через Make
Все шаги пайплайна (lint, bundle, генерация SDK, golden-, smoke-тесты, а также schemathesis тесты) можно запускать локально через Make — напрямую или в Docker.
Через Docker (рекомендуется)
Требуется только Docker и Docker Compose. Остальное уже есть в образе.
docker compose run --rm sdk make help # список целей
docker compose run --rm sdk make lint # проверка OpenAPI
docker compose run --rm sdk make bundle # сборка dist/openapi.yaml
docker compose run --rm sdk make light-bundle # сборка dist/openapi.yaml для быстрых smoke-тестов
docker compose run --rm sdk make generate-php # генерация PHP SDK
docker compose run --rm sdk make generate-java # генерация Java SDK
docker compose run --rm java-sdk bash -lc "cd clients/java && mvn clean package" # сборка shaded Java SDK
docker compose run --rm sdk make test-golden-php # golden-тесты
docker compose run --rm java-sdk make test-golden-java # golden-тесты
docker compose run --rm sdk make test-smoke # smoke-тесты (openapi-mock поднимается автоматически)
docker compose run --rm -e SCHEMATHESIS_HOST=host -e SCHEMATHESIS_LOGIN=login -e SCHEMATHESIS_PASSWORD=pass sdk make schemathesis # schemathesis-тесты на реальном окружении
docker compose run --rm sdk make all # lint + bundle + generate-php + test-golden + test-smoke
Redocly lint запрещает example внутри Schema. Для Schemathesis examples используйте только request examples в src/paths/** (requestBody.content.<media-type>.example).
При повторных запусках зависимости npm не перекачиваются (пропуск npm ci, если package-lock.json не менялся). Принудительная переустановка:
docker compose run --rm -e NPM_CI_FORCE=1 sdk make lint
Java SDK собирается как self-contained shaded-артефакт: внешние зависимости Jackson (включая nullable-модуль) затеняются и релокируются внутрь артефакта.
Локально (без Docker)
На машине должны быть установлены: Node.js, npm, PHP ≥8.1 с расширениями dom, json, mbstring, curl, Composer.
make help
make lint
make bundle
make light-bundle
make generate-php
make test-golden-php # из корня репо; в tests/php нужен composer install
make test-smoke # нужен запущенный openapi-mock (например на http://localhost:8080)
make schemathesis # в скрипте нужно также задать переменные SCHEMATHESIS_HOST, SCHEMATHESIS_LOGIN, SCHEMATHESIS_PASSWORD
Скрипты в scripts/ определяют корень репозитория по своему пути, поэтому их можно вызывать из любой директории (и из Docker, и локально).
Добавление новых сущностей
1. Создание схем
# Выбрать из существующих или создать новую папку для описания новой сущности
mkdir components/schemas/{category}
# Создать файлы схем
touch components/schemas/{category}/entity.yaml
touch components/schemas/{category}/entityList.yaml
2. Создание путей
# Создать папку для путей
mkdir paths/{category}/{entity}
# Создать файлы путей
touch paths/{category}/{entity}/entities.yaml
touch paths/{category}/{entity}/entity-by-id.yaml
3. Обновление главного файла
Добавить ссылки в openapi.yaml:
paths:
/entity/{entity-name}:
$ref: './paths/{category}/{entity}/entities.yaml'
/entity/{entity-name}/{id}:
$ref: './paths/{category}/{entity}/entity-by-id.yaml'
components:
schemas:
NewEntity:
$ref: './components/schemas/{category}/entity.yaml'
4. Добавить описание для конструктора meta
Для удобства пользования SDK было добавлено кастомное расширение x-entity-static-builder.
Подробнее про расширение в файле custom-extension-readme.md.
Если добавляемая сущность имеет meta, то необходимо описать свойство x-entity-static-builder в спецификации модели
Версионирование
Версионирование спецификации соответствует формату semver X.Y.Z (например, 0.3.0, 1.0.0)
Лицензия
Спецификация создана на основе официальной документации МойСклад API.