batch
Для выполнения нескольких методов в одном запросе используйте метод core/batch.
Конечная точка
Запрос можно отправить в одной из двух форм. В первой форме параметр params содержит массив методов:
svc=core/batch¶ms=[
{
"svc": "<text>",
"params": {}
}
]
Во второй форме параметр params содержит объект, что также позволяет использовать параметр flags:
svc=core/batch¶ms={
"params": [{
"svc": "<text>",
"params": {}
}],
"flags": <uint>
}
Параметры
Параметры svc и params указываются для каждого метода массива. Параметр flags указывается для запроса в целом.
| Название | Описание |
|---|---|
| svc | Название метода, который нужно выполнить, например core/search_items. |
| params | Параметры метода. |
| flags | Битовая маска, которая может включать следующие флаги:
0, чтобы выполнить все методы без этих ограничений. Параметр доступен только во второй форме запроса. Если не указать его в этой форме, запрос вернет ошибку 4. |
Ответ
Если запрос выполнен успешно, результат возвращается в следующем формате:
[
{ /* Объект с данными, если ошибок нет. */
...
},
{ /* Код ошибки, если произошла ошибка. */
"error": <int>
},
...
]
Каждый элемент массива — это результат соответствующего метода без дополнительной обертки. Если метод возвращает ошибку, его элемент содержит код ошибки этого метода.
Если параметр
flagsвключает флаг0x01 (1)и один из методов возвращает ошибку, все следующие за ним методы возвращают код ошибки 10.
Ограничения
Если параметр flags включает флаг 0x02 (2), к запросу применяются следующие ограничения. В таблице указаны значения по умолчанию; на сервере могут использоваться другие значения.
| Ограничение | Значение по умолчанию | Результат при превышении ограничения |
|---|---|---|
| Количество методов в запросе | 100 | Методы не выполняются, и запрос возвращает ошибку 4. |
| Размер результата одного метода | 1 МБ | Элемент этого метода содержит {"error":6,"reason":"BATCH_SINGLE_RESPONSE_TOO_LARGE"}. |
| Размер всего ответа | 10 МБ | Элемент метода, результат которого превышает ограничение, содержит {"error":6,"reason":"BATCH_RESPONSE_TOO_LARGE"}. |
Если превышено одно из ограничений на размер, следующие методы не выполняются и не включаются в ответ, поэтому массив может содержать меньше элементов, чем запрос. Если элемент с ошибкой тоже не помещается в ответ, массив заканчивается последним поместившимся элементом.
Коды ошибок
Сам запрос может вернуть следующие коды ошибок:
| Код | Описание |
|---|---|
| 4 | Неверные входные параметры. Это происходит в одном из следующих случаев:
|
| 6 | Возвращаемый результат слишком большой. Это происходит в одном из следующих случаев:
|
Отдельный метод может вернуть собственный код ошибки в своем элементе массива. Кроме кодов самого метода, возможны следующие коды:
| Код | Описание |
|---|---|
| 2 | Неверное название метода в параметре svc. |
| 6 | Результат слишком большой. Этот код возможен, только если параметр flags включает флаг 0x02 (2). Подробнее см. в разделе Ограничения. |
| 10 | Метод не выполнен. Это происходит в одном из следующих случаев:
|
Примеры
Во всех примерах ниже отправляются одни и те же два метода: первый обращается к элементу с ID 1004, к которому у пользователя нет прав доступа, а второй получает свойства ресурса с ID 1003. Добавьте в каждый запрос параметр sid с идентификатором вашей сессии.
Выполнение всех методов несмотря на ошибку
В первой форме параметр params содержит только массив методов, поэтому параметр flags указать негде. Выполняются все методы.
svc=core/batch¶ms=[
{
"svc": "core/search_item",
"params": {
"id": 1004,
"flags": 1
}
},
{
"svc": "core/search_item",
"params": {
"id": 1003,
"flags": 1
}
}
]
Вторая форма дает тот же результат, если значение параметра flags равно 0.
svc=core/batch¶ms={
"params": [
{
"svc": "core/search_item",
"params": {
"id": 1004,
"flags": 1
}
},
{
"svc": "core/search_item",
"params": {
"id": 1003,
"flags": 1
}
}
],
"flags": 0
}
Ответ:
[
{
"error": 7
},
{
"item": {
"nm": "Resource",
"cls": 3,
"id": 1003,
"mu": 0,
"uacl": 19826928009763
},
"flags": 1
}
]
Ошибка первого метода не влияет на второй.
Остановка запроса после первой ошибки
Чтобы остановить выполнение после первой ошибки, используйте вторую форму запроса и укажите флаг 0x01 (1). Методы те же, но теперь второй из них не выполняется и возвращает ошибку 10.
svc=core/batch¶ms={
"params": [
{
"svc": "core/search_item",
"params": {
"id": 1004,
"flags": 1
}
},
{
"svc": "core/search_item",
"params": {
"id": 1003,
"flags": 1
}
}
],
"flags": 1
}
Ответ:
[
{
"error": 7
},
{
"error": 10
}
]