Получить связи (API v2)

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

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

Запрос

HTTP Запрос

POST /node/api/v2/getLinks

Права

linkPermissions

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

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

filter

Object

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

filter.source

Array<String>

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

filter.target

Array<String>

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

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": {
        "source": [
            "66c05eec7e8a9b00113f341f",
            "66a8972a71ca890012634a03" // ID объекта-источника
        ],
        "target": [
            "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"], // list is sorted by class_id in ascending order, then by id in descending order
    "limit": 5,
    "offset": 5
}

Ответ

Ответ содержит список связей в поле items и количество связей в поле count.

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

Примеры

Запрос

  • Bash

  • JavaScript

  • NodeJS

  • Python

login=<...>
password=<...>
saymon_hostname=<...>
url=https://$saymon_hostname/node/api/v2/getLinks

curl -X POST $url -u $login:$password \
    -H "Content-Type: application/json" \
    -d @- <<EOF
{
    "filter":{
        "class_id": [3, 35]
    },
    "fields": ["class_id", "name", "source_name", "target_name"],
    "order": ["class_id", "!id"]
}
EOF
let login = <...>
let password = <...>
let saymonHostname = <...>
let path = "/node/api/v2/getLinks";
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":{
        "class_id": [3, 35]
    },
    "fields": ["class_id", "name", "source_name", "target_name"],
    "order": ["class_id", "!id"]
});

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/getLinks";
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":{
        "class_id": [3, 35]
    },
    "fields": ["class_id", "name", "source_name", "target_name"],
    "order": ["class_id", "!id"]
});

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

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

body = {
    "filter":{
        "class_id": [3, 35]
    },
    "fields": ["class_id", "name", "source_name", "target_name"],
    "order": ["class_id", "!id"]
}

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

Ответ

{
    "count": 1264,
    "items": [
        {
            "class_id": 35,
            "source_name": "Host 1",
            "target_name": "Host 2",
            "name": "Host 1 - Host 2",
            "id": 282
        },
        ...
    ]
}