Схема выгрузки и преобразования
Создание JSON-профиля
POST /api/v1/exports
{
"site_id": 1,
"name": "Каталог для магазина",
"format": "json",
"output_module": "json",
"schema": [
{"source":"sku","target":"id","cast":"string"},
{"source":"name","target":"title"},
{"source":"price","target":"offer.price","cast":"decimal","when_empty":"null"}
],
"format_options": {"pretty":true}
}
Поля source должны существовать в схеме сайта или справочнике системных полей. Получите их через карточку выгрузки. Успешный ответ: 201 и созданный профиль; это ещё не файл. code необязателен при создании и формируется автоматически. format: csv, json, xml. Если schema не передана, система предлагает начальное сопоставление.
Правило поля
| Ключ | Назначение |
|---|---|
source |
Откуда брать значение |
target |
Имя в результате; точки создают вложенность, images[] задаёт список |
label |
Человекочитаемый заголовок CSV |
cast |
Приведение типа; допустимые значения возвращает карточка выгрузки |
when_empty |
Поведение при пустом значении; используйте справочник профиля |
default |
Значение замены, когда выбран соответствующий режим |
split |
Разделитель строкового списка, до 8 символов |
Например offer.price создаёт вложенный объект JSON. В CSV вложенности нет: будет соответствующая колонка. В XML имена элементов должны быть допустимыми XML-именами.
Параметры формата и фильтры
CSV: delimiter: один символ, eol: lf/crlf, bom: логическое значение. JSON: pretty, group_by. XML: root и item. Простая JSON-группировка задаётся путём выходного поля в group_by; для сложных итогов используйте обработку набора.
{"filters":{"where":[{"field":"price","op":"gt","value":0}]},"include_deleted":false}
Операторы: =, !=, contains, empty, not_empty, gt, lt. Максимум 50 условий. Поля и значения проверяйте на реальных записях.
Обработка кодом
PUT /exports/{id}/transformation
{"mode":"mapping","source":null,"base_version_id":null}
mapping: обычное сопоставление; records: изменение записей с сохранением числа и порядка; dataset: обработка набора, группировки и фильтрация. Для кода передайте source с функцией run(\Sdk\Context $ctx). В base_version_id передайте текущую converter_version_id из карточки; null: когда преобразования ещё нет. Это защита от перезаписи чужой правки. При конфликте заново загрузите карточку и объедините изменения.
Проверка: GET /exports/{id}/preview. Режим набора ограничен 10 000 входных записей и 16 МБ. Для endpoint набор ограничен текущей страницей. Обработка кодом и preview расходуют вычислительный бюджет так же, как действия через интерфейс.
Подробности и ограничения: обработка выгрузки кодом.