API МИФ CMS
Два интерфейса: совместимый с MODX apimode для текущего Next.js-фронта и REST /api/v1 для новых клиентов. Всё только на чтение, ответы в JSON.
1. Совместимость с MODX: ?apimode=1
Любой путь сайта плюс ?apimode=1 отдаёт JSON страницы. Формат определяется полем «Формат ответа API» у шаблона ресурса. В каждом ответе есть блок common: meta, menu, header, breadcrumbs, modxId, modxTemplateId.
Главная: bookofweek, new, bestsellers, anticipated, childrenbooks
Подборка «Новинки»: books.new, books.soon
Категория: page.data (поля ресурса MODX), page.tvs, products, count, paging
Товар: data.product (baseData, description, quotes, authors…), data.shelves
Текстовая страница: content (resource*-поля и tvs)
Предпросмотр неопубликованного ресурса. Работает только при входе в админку, кэш не используется.
Заголовки ответа: X-CMS-Cache (HIT / MISS / BYPASS), X-CMS-Resource, X-CMS-Time-Ms. Если ресурс не найден, возвращается 404 и {"error":{"version":1,"code":404,…}}: этот формат ошибки уже обрабатывает фронт.
2. REST API v1
Ограничение: 120 запросов в минуту с одного IP. Отдаются только опубликованные ресурсы.
Дочерние ресурсы узла дерева (без parent — корень)
Ресурс: поля MODX и значения TV
Список товаров с фильтрами и пагинацией. В types каждого товара — форматы: paperbook, ebook, audiobook (у аудио — блок audio: чтец, длительность, фрагменты, буклеты)
| Параметр | Пример | Описание |
|---|---|---|
category | children-books | slug категории |
tag | nasha_strana_rossiya | slug тега или серии |
author | rychkova-nadejda | slug автора |
flag | new | soon | best | preorder | метка |
type | product | course | certificate | тип товара |
format | paperbook | ebook | audiobook | есть в продаже в этом формате |
search | Новый год | поиск по названию |
page, per_page | 2, 24 | пагинация, per_page ≤ 100 |
Полная карточка товара
Категории с количеством товаров
Автор и его книги
Содержимое чанка
Публичные системные настройки
3. Перенос из MODX
Команда php artisan modx:import подключается к базе MODX (переменные MODX_DB_* в .env) и переносит категории элементов, шаблоны, TV, привязку TV к шаблонам, дерево ресурсов контекста web, значения TV, чанки и настройки. ID сохраняются. Можно перенести отдельную часть: --only=resources.