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

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

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

Запрос

HTTP Запрос

POST /node/api/v2/getObjects

Права

objectPermissions

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

Параметр Тип Описание

filter

Object

Фильтр, применяемый к списку связей.

filter.child_id

Array<String>

Список ID объектов. Ответ на запрос включит все объекты, у которых любой из указанных объектов является дочерним.

filter.parent_id

Array<String>

Список ID объектов. Ответ на запрос включит все объекты, у которых любой из указанных объектов является родительским.

filter.name

String

Имя или часть имени объекта. Не чувствительно к регистру.

filter.state_id

Array<String>

Список ID состояний. Связи, которые находятся в указанных состояниях будут включены в ответ.

filter.class_id

Array<String>

Список ID классов. Связи этих классов будут включены в ответ.

filter.id

Array<String>

Список ID связей. Связи, с указанными ID будут включены в ответ.

filter.tags

Array<String>

Список ID тегов. Связи, отмеченные указанными тегами будут включены в ответ.

fields

Array<String>

Названия полей, которые должны быть включены в ответ.

order

Array

Список полей, по которым нужно отсортировать связи в ответе. По умолчанию, указанные ссылки сортируются по возрастанию. Если перед названием поля поставить символ !, список будет сортироваться по этому полю по убыванию.

limit

Integer

Максимальное количество связей, возвращаемых запросом.

offset

Integer

Количество пропущенных связей.

Тело запроса

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

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

  • source

  • target

  • class_id

  • state_id

  • last_state_update

  • source_name

  • target_name

  • name

  • id

{
    "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"
    ],  // названия полей
    "order": [
        "class_id",
        "!id"], // список отсортирован по полю class_id по возрастанию и по полю id по убыванию
    "limit": 5,
    "offset": 5
}

Ответ

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

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

Примеры

Запрос

  • Bash

  • JavaScript

  • NodeJS

  • Python

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_id": [1, 2, 3], //string|number
        "class_id": [], //string|number
        "id": [],  //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
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_id": [1, 2, 3], //string|number
        "class_id": [], //string|number
        "id": [],  //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));
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_id": [1, 2, 3], //string|number
        "class_id": [], //string|number
        "id": [],  //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();
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_id": [1, 2, 3], //string|number
        "class_id": [], //string|number
        "id": [],  //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)

Ответ

{
    "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"
        },
        ...
    ]
}