Документация1С-Битрикс: Модулиnative.apiРазработчикамКарта роутов

Вложенные параметры

Вложенная структура задаётся ключом RouteConfig::PARAMETERS внутри описания параметра. Для родителя используйте ParameterConfig::TYPE со значением TypeConfig::ARRAY.

Объект customer
└─ parameters
   ├─ name → правило поля customer.name
   └─ lastName → правило поля customer.lastName

Список items
└─ parameters
   └─ [0] → общая карта полей каждого элемента
      ├─ productId → правило поля items[i].productId
      └─ name → правило поля items[i].name

[0] в карте задаёт правила для всех элементов списка. Это не ограничение проверки первым элементом.

Объект

В parameters перечислите поля с настройками type, required, possibleValue и вложенными parameters.

// {"customer": {
//     "name": "Иван",
//     "lastName": "Иванов",
//     "birthDate": "1990-05-21"
// }}
'customer' => [
    ParameterConfig::TYPE => TypeConfig::ARRAY,
    ParameterConfig::REQUIRED => true,
    RouteConfig::PARAMETERS => [
        'name' => [
            ParameterConfig::TYPE => TypeConfig::STRING,
            ParameterConfig::REQUIRED => true,
        ],
        'lastName' => [
            ParameterConfig::TYPE => TypeConfig::STRING,
            ParameterConfig::REQUIRED => true,
        ],
        'birthDate' => [
            ParameterConfig::TYPE => TypeConfig::STRING,
            ParameterConfig::REQUIRED => true,
        ],
    ],
],

Список объектов

Для списка объектов обязательна дополнительная пара квадратных скобок [] внутри parameters. Она помещает карту полей в parameters[0], чтобы проверять каждый объект списка. Без этих скобок описывается один объект.

// {
//     "items": [
//         {
//             "productId": 101,
//             "name": "Термокружка",
//             "price": 149900,
//             "url": "https://example.ru/products/101/",
//             "properties": {
//                 "color": "Чёрный",
//                 "warrantyMonths": 12
//             }
//         },
//         {
//             "productId": 102,
//             "name": "Рюкзак",
//             "price": 299900,
//             "url": "https://example.ru/products/102/"
//         }
//     ]
// }
'items' => [
    ParameterConfig::TYPE => TypeConfig::ARRAY,
    ParameterConfig::REQUIRED => true,
    RouteConfig::PARAMETERS => [
        [ // Обязательные скобки: карта полей одного элемента списка
            'productId' => [
                ParameterConfig::TYPE => TypeConfig::INTEGER,
                ParameterConfig::REQUIRED => true,
            ],
            'name' => [
                ParameterConfig::TYPE => TypeConfig::STRING,
                ParameterConfig::REQUIRED => true,
            ],
            // Цена в копейках
            'price' => [
                ParameterConfig::TYPE => TypeConfig::INTEGER,
                ParameterConfig::REQUIRED => true,
            ],
            'url' => [
                ParameterConfig::TYPE => TypeConfig::STRING,
                ParameterConfig::REQUIRED => false,
            ],
            // Необязательные характеристики товара
            'properties' => [
                ParameterConfig::TYPE => TypeConfig::ARRAY,
                ParameterConfig::REQUIRED => false,
                RouteConfig::PARAMETERS => [
                    'color' => [
                        ParameterConfig::TYPE => TypeConfig::STRING,
                        ParameterConfig::REQUIRED => false,
                    ],
                    'warrantyMonths' => [
                        ParameterConfig::TYPE => TypeConfig::INTEGER,
                        ParameterConfig::REQUIRED => false,
                    ],
                ],
            ],
        ],
    ],
],

Обязательность

required вложенного поля проверяется, только если передан родитель. Для обязательной структуры задайте required на каждом уровне.

Непустой possibleValue у родителя отключает проверку вложенных полей.

Ошибки содержат вложенные поля и индексы. Оба формата показаны в примере карты.