Перейти к основному содержимому

7.3 Асинхронное использование API

Возможно как синхронное, так и асинхронное использование API endpoint. При синхронном использовании результат запроса возвращается по факту выполнения, однако иногда это неприемлемо для длительных задач.

Для асинхронного выполнения (task) необходимо использовать URI /.api/V4/.async/.req/. Результат выполнения проверяется отдельным методом task().

В качестве идентификатора task используется JSON RPC id оригинального запроса. Метод task() используется для запросов, отправленных синхронно, но завершившихся таймаутом.

Если исходный запрос ещё не был обработан, то поле result->data->replied содержит 0/false, а поле result->data->response имеет значение null.

Пример: запрос vm-list с RPC id==dd408526-563a-11ea-9bec-920e9c0cd5ca был выполнен асинхронно. Позже его результат был запрошен с помощью метода task().

Асинхронный запрос:

{
"jsonrpc": "2.0",
"method": "vm-list",
"id": "dd408526-563a-11ea-9bec-920e9c0cd5ca"
}

Ответ на асинхронный запрос:

{
"id": "dd408526-563a-11ea-9bec-920e9c0cd5ca",
"jsonrpc": "2.0",
"result": {
"code": 999,
"data": "request queued"
}
}

Запрос task:

{
"jsonrpc": "2.0",
"method": "task",
"id": "803d1f16-b823-11e9-a040-52ed8478de0e",
"params": {
"id": "dd408526-563a-11ea-9bec-920e9c0cd5ca"
}
}

Ответ task:

{
"id": "803d1f16-b823-11e9-a040-52ed8478de0e",
"jsonrpc": "2.0",
"result": {
"code": 1,
"data": {
"method": "vm-list",
"replied": 1,
"reply_time": 1562568328,
"request": {
"id": "dd408526-563a-11ea-9bec-920e9c0cd5ca",
"jsonrpc": "2.0",
"method": "vm-list"
},
"response": {
"id": "dd408526-563a-11ea-9bec-920e9c0cd5ca",
"jsonrpc": "2.0",
"result": {
"code": 1,
"data": [
{
"os_profile": 6,
"os_type": 1,
"vdc_id": 2,
"vm_id": "41",
"vm_name": "FreeBSD vxlan test net30 #1",
"vm_status": 1
},
{
"os_profile": 6,
"os_type": 1,
"vdc_id": 2,
"vm_id": "42",
"vm_name": "FreeBSD vxlan test net30 #2",
"vm_status": 1
},
{
"os_profile": 4,
"os_type": 6,
"vdc_id": 2,
"vm_id": "71",
"vm_name": "CentOS7 io PerfTest #30",
"vm_status": 3
},
{
"os_profile": 4,
"os_type": 6,
"vdc_id": 2,
"vm_id": "72",
"vm_name": "CentOS7 io PerfTest #31",
"vm_status": 3
},
{
"os_profile": 4,
"os_type": 6,
"vdc_id": 2,
"vm_id": "73",
"vm_name": "CentOS7 io PerfTest #32",
"vm_status": 3
},
{
"os_profile": 4,
"os_type": 6,
"vdc_id": 2,
"vm_id": "74",
"vm_name": "CentOS7 io PerfTest #33",
"vm_status": 3
},
{
"os_profile": 4,
"os_type": 6,
"vdc_id": 2,
"vm_id": "76",
"vm_name": "CentOS7 io PerfTest #35",
"vm_status": 3
}
]
}
},
"sync_req": 0,
"ts": 1562568328
}
}
}