Получить объекты (API v2)

Получить объекты (API v2)

Получить объекты (API v2) ​

NOTE

Это экспериментальный запрос, который может измениться в будущих версиях системы.

Запрос, который возвращает объекты в системе. Ответ на этот запрос можно фильтровать и настраивать параметрами, которые передаются в теле запроса.

Запрос ​

HTTP Запрос ​

text
POST /node/api/v2/getObjects

Права ​

text
objectPermissions

Параметры тела запроса ​

ПараметрТипОписание
filterObjectФильтр, применяемый к списку связей. Узнать больше можно на странице Поиск (API v2).
filter.child_idsArray<String>Список ID объектов. Ответ на запрос включит все объекты, у которых любой из указанных объектов является дочерним.
filter.parent_idsArray<String>Список ID объектов. Ответ на запрос включит все объекты, у которых любой из указанных объектов является родительским.
filter.nameStringИмя или часть имени объекта. Не чувствительно к регистру.
filter.state_idsArray<String>Список ID состояний. Связи, которые находятся в указанных состояниях будут включены в ответ.
filter.class_idsArray<String>Список ID классов. Связи этих классов будут включены в ответ.
filter.idsArray<String>Список ID связей. Связи, с указанными ID будут включены в ответ.
filter.tagsArray<String>Список ID тегов. Связи, отмеченные указанными тегами будут включены в ответ.
fieldsArray<String>Названия полей, которые должны быть включены в ответ.
flagsArray<String>Дополнительные настройки запроса.
Система поддерживает следующие флаги:
  • paths – добавить путь до объекта в ответ (добавляется в поле paths),
  • deepParents – особый режим поиска, в котором запрос вернёт объекты имеющие в своем пути объекты с id из списка parent_ids,
  • withHidden – включить скрытые объекты в тело ответа,
  • invalidateCacheMode – обновить кэш Redis для найденных объектов. | | order | Array | Список полей, по которым нужно отсортировать связи в ответе. По умолчанию, указанные ссылки сортируются по возрастанию. Если перед названием поля поставить символ !, список будет сортироваться по этому полю по убыванию. | | limit | Integer | Максимальное количество связей, возвращаемых запросом. | | offset | Integer | Количество пропущенных связей. |

Тело запроса ​

Тело запроса позволяет настраивать ответ этого запроса. В теле можно указать фильтры и сортировку возвращаемых объектов, указать какие поля возвращаются и применять пагинацию с помощью параметров limit и offset.

Тело запроса указывать не обязательно. Если его не указать, то запрос вернёт все объекты в системе и включит в записи следующие поля:

  • source
  • target
  • class_id
  • state_id
  • last_state_update
  • source_name
  • target_name
  • name
  • id
json
{
    "filter": {
        "parent_id": [
            "66c05eec7e8a9b00113f341f",
            "66a8972a71ca890012634a03" // ID родительских объектов
        ],
        "child_id": [
            "66cba96a8bce1b00111a8bb3",
            "66cbb1268bce1b00111a8bc0"
        ], // ID дочерних объектов
        "state_id": [
            1,
            3,
            "58ff5f454815650157a6a62f"
        ], // ID состояния объектов
        "class_id": [
            "5926a84355687d6bb793dd88",
            "5926a84355687d6bb793dd9c"
        ], // ID класса объектов
        "id": [
            11,
            14,
            "629709900618240e2b83a18e",
            "626f935fbad91064e16e57b7",
            "626ed4bcbad91064e16e521a"
        ], // ID объектов
        "tags": [
            "63c6b25aee2fca5eb640456c",
            "6401bbb8b5208c0a9aad17cc"
        ] // ID тегов
    },
    "fields": [
        "name",
        "class_id",
        "state_id"
    ],  // названия полей
    "flags":[
        "withHidden",
        "paths"
    ],
    "order": [
        "class_id",
        "!id"], // список отсортирован по полю class_id по возрастанию и по полю id по убыванию
    "limit": 5,
    "offset": 5
}

Ответ ​

Ответ содержит список объектов в поле items и количество объектов в поле count.

Список объектов зависит от фильтров и настроек, указанных в теле запроса.

Примеры ​

Запрос ​

  • Bash
  • JavaScript
  • NodeJS
  • Python
bash
login=<...>
password=<...>
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/v2/getObjects

curl -X POST $url -u $login:$password \
    -H "Content-Type: application/json" \
    -d @- <<EOF
{
    "filter": {
        "source": [
            "66c05eec7e8a9b00113f341f",
            "66a8972a71ca890012634a03" //string|number
        ],
        "target": ["66cba96a8bce1b00111a8bb3", "66cbb1268bce1b00111a8bc0"], //string|number
        "state_ids": [1, 2, 3], //string|number
        "class_ids": [], //string|number
        "ids": [],  //string|number
        "tags": [] //string
    },
    "fields": [
        "name",
        "class_id",
        "state_id"
    ],

    "order":["field1","!field2"], //field1 is sorted in ascending order, field2 – in descending
    "limit": 5,
    "offset": 5
}
EOF
javascript
let login = <...>
let password = <...>
let saymonHostname = <...>
let path = "/node/api/v2/getObjects";
let auth = "Basic " + btoa(login + ":" + password);

let headers = new Headers();
headers.append("Content-Type", "application/json");
headers.append("Authorization", auth);

let data = JSON.stringify({
    "filter": {
        "source": [
            "66c05eec7e8a9b00113f341f",
            "66a8972a71ca890012634a03" //string|number
        ],
        "target": ["66cba96a8bce1b00111a8bb3", "66cbb1268bce1b00111a8bc0"], //string|number
        "state_ids": [1, 2, 3], //string|number
        "class_ids": [], //string|number
        "ids": [],  //string|number
        "tags": [] //string
    },
    "fields": [
        "name",
        "class_id",
        "state_id"
    ],

    "order":["field1","!field2"], //field1 is sorted in ascending order, field2 – in descending
    "limit": 5,
    "offset": 5
});

let requestOptions = {
    method: "POST",
    headers: headers,
    body: data
};

fetch(saymonHostname + path, requestOptions)
    .then(response => response.text())
    .then(result => console.log(result))
    .catch(error => console.log("error", error));
javascript
const http = require("http");

let login = <...>
let password = <...>
let saymonHostname = <...>
let path = "/node/api/v2/getObjects";
let auth = "Basic " + Buffer.from(login + ":" + password).toString("base64");

let options = {
    "method": "POST",
    "hostname": saymonHostname,
    "headers": {
        "Authorization": auth,
        "Content-Type": "application/json"
    },
    "path": path
};

let req = http.request(options, function (res) {
    let chunks = [];

    res.on("data", function (chunk) {
        chunks.push(chunk);
    });

    res.on("end", function (chunk) {
        let body = Buffer.concat(chunks);
        console.log(body.toString());
    });

    res.on("error", function (error) {
        console.error(error);
    });
});

let data = JSON.stringify({
    "filter": {
        "source": [
            "66c05eec7e8a9b00113f341f",
            "66a8972a71ca890012634a03" //string|number
        ],
        "target": ["66cba96a8bce1b00111a8bb3", "66cbb1268bce1b00111a8bc0"], //string|number
        "state_ids": [1, 2, 3], //string|number
        "class_ids": [], //string|number
        "ids": [],  //string|number
        "tags": [] //string
    },
    "fields": [
        "name",
        "class_id",
        "state_id"
    ],

    "order":["field1","!field2"], //field1 is sorted in ascending order, field2 – in descending
    "limit": 5,
    "offset": 5
});

req.write(data);
req.end();
python
import requests

login = <...>
password = <...>
saymon_hostname = <...>
url = "https://" + saymon_hostname + "/node/api/v2/getObjects"

body = {
    "filter": {
        "source": [
            "66c05eec7e8a9b00113f341f",
            "66a8972a71ca890012634a03" //string|number
        ],
        "target": ["66cba96a8bce1b00111a8bb3", "66cbb1268bce1b00111a8bc0"], //string|number
        "state_ids": [1, 2, 3], //string|number
        "class_ids": [], //string|number
        "ids": [],  //string|number
        "tags": [] //string
    },
    "fields": [
        "name",
        "class_id",
        "state_id"
    ],

    "order":["field1","!field2"], //field1 is sorted in ascending order, field2 – in descending
    "limit": 5,
    "offset": 5
}

response = requests.request("POST", url, json=body, auth=(login, password))
print(response.text)

Ответ ​

json
{
    "count": 1264,
    "items": [
        {
            "source": "626f8ffd38f5c964197d1d7d",
            "target": "626f8ffd38f5c964197d1d8d",
            "class_id": 8,
            "state_id": 1,
            "last_state_update": 1651479401339,
            "source_name": "192.168.2.3",
            "target_name": "192.168.11.3/255.255.255.255",
            "name": "192.168.2.3 - 192.168.11.3/255.255.255.255",
            "id": "626f9369033ee864af76d9d3"
        },
        ...
    ]
}