API элементов библиотек

Note

Starting in Grafana 13, /api endpoints are being deprecated in favor of the /apis route. Note that while Grafana is working on migrating existing APIs, currently there may not be an exact match to the legacy API you’re using.

This change doesn’t disrupt or break your current setup. Legacy APIs are not being disabled and remain fully accessible and operative, but /api routes will no longer be updated.

To learn more refer to the new API structure in Grafana.

Идентификатор (id) и уникальный идентификатор (uid)

Идентификатор (ID) элемента библиотеки — это автоинкрементное числовое значение, уникальное для каждой установки Grafana.

Уникальный идентификатор (UID) элемента библиотеки однозначно идентифицирует элементы библиотек между несколькими установками Grafana. Он генерируется автоматически, если вы не указали его при создании элемента библиотеки. UID обеспечивает согласованные URL для доступа к элементам библиотек и при синхронизации элементов библиотек между несколькими установками Grafana.

Максимальная длина UID — 40 символов.

Получение всех элементов библиотек

GET /api/library-elements

Возвращает список всех элементов библиотек, которые аутентифицированный пользователь имеет право просматривать. Используйте параметр запроса perPage, чтобы управлять максимальным количеством возвращаемых элементов библиотек; предел по умолчанию — 100. Также можно использовать параметр запроса page, чтобы получить элементы библиотек с любой страницы, кроме первой.

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

  • searchString: часть имени или описания, по которой выполняется поиск.
  • kind: тип элемента для поиска. Используйте 1 для библиотечных панелей.
  • sortDirection: порядок сортировки элементов. Используйте alpha-asc для возрастающего и alpha-desc для убывающего порядка сортировки.
  • typeFilter: разделённый запятыми список типов для фильтрации элементов.
  • excludeUid: UID элемента, который нужно исключить из результатов поиска.
  • folderFilter: устарел. Разделённый запятыми список ID папок для фильтрации элементов. Используйте вместо него folderFilterUIDs.
  • folderFilterUIDs: разделённый запятыми список UID папок для фильтрации элементов.
  • perPage: количество результатов на странице; по умолчанию 100.
  • page: страница для набора записей, учитывая, что за раз возвращается только perPage записей. Нумерация начинается с 1.

Пример запроса:

http
GET /api/library-elements?perPage=10 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
  "result": {
     "totalCount": 15,
     "page": 1,
     "perPage": 10
     "elements": [
        {
            "id": 25,
            "orgId": 1,
            "folderId": 0,
            "uid": "V--OrYHnz",
            "name": "API docs Example",
            "kind": 1,
            "type": "text",
            "description": "",
            "model": {...},
            "version": 1,
            "meta": {
                "folderName": "General",
                "folderUid": "",
                "connectedDashboards": 1,
                "created": "2021-09-27T09:56:17+02:00",
                "updated": "2021-09-27T09:56:17+02:00",
                "createdBy": {
                    "id": 1,
                    "name": "admin",
                    "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
                },
                "updatedBy": {
                    "id": 1,
                    "name": "admin",
                    "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
                }
            }
        },
        {...}
        {...}
     ],
  }
}

Коды состояния:

  • 200: Найдено
  • 401: Не авторизован

Получение элемента библиотеки по uid

GET /api/library-elements/:uid

Возвращает элемент библиотеки с заданным UID.

Пример запроса:

http
GET /api/library-elements/V--OrYHnz HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
    "result": {
      "id": 25,
      "orgId": 1,
      "folderId": 0,
      "uid": "V--OrYHnz",
      "name": "API docs Example",
      "kind": 1,
      "type": "text",
      "description": "",
      "model": {...},
      "version": 1,
      "meta": {
          "folderName": "General",
          "folderUid": "",
          "connectedDashboards": 1,
          "created": "2021-09-27T09:56:17+02:00",
          "updated": "2021-09-27T09:56:17+02:00",
          "createdBy": {
              "id": 1,
              "name": "admin",
              "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
          },
          "updatedBy": {
              "id": 1,
              "name": "admin",
              "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
          }
      }
   }
}

Коды состояния:

  • 200: Найдено
  • 401: Не авторизован
  • 404: Элемент библиотеки не найден

Получение элемента библиотеки по имени

GET /api/library-elements/name/:name

Возвращает элемент библиотеки с заданным именем

Пример запроса:

http
GET /api/library-elements/name/API docs Example HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
    "result": [
        {
            "id": 25,
            "orgId": 1,
            "folderId": 0,
            "uid": "V--OrYHnz",
            "name": "API docs Example",
            "kind": 1,
            "type": "text",
            "description": "",
            "model": {...},
            "version": 1,
            "meta": {
                "folderName": "General",
                "folderUid": "",
                "connectedDashboards": 1,
                "created": "2021-09-27T09:56:17+02:00",
                "updated": "2021-09-27T09:56:17+02:00",
                "createdBy": {
                    "id": 1,
                    "name": "admin",
                    "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
                },
                "updatedBy": {
                    "id": 1,
                    "name": "admin",
                    "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
                }
            }
        }
    ]
}

Коды состояния:

  • 200: Найдено
  • 401: Не авторизован
  • 404: Элемент библиотеки не найден

Получение связей элемента библиотеки

GET /api/library-elements/:uid/connections

Возвращает список связей для элемента библиотеки на основе указанного UID.

Пример запроса:

http
GET /api/library-elements/V--OrYHnz/connections HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
    "result": [
        {
            "id": 148, // Deprecated: will be removed in the future.
            "kind": 1,
            "elementId": 25,
            "connectionId": 527,
            "connectionUid": "dHEquNzGz",
            "created": "2021-09-27T10:00:07+02:00",
            "createdBy": {
                "id": 1,
                "name": "admin",
                "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
            }
        }
    ]
}

Коды состояния:

  • 200: Найдено
  • 401: Не авторизован
  • 404: Элемент библиотеки не найден

Создание элемента библиотеки

POST /api/library-elements

Создаёт новый элемент библиотеки.

Схема тела JSON:

  • folderId: ID папки, в которой хранится элемент библиотеки. Устарел начиная с Grafana v9
  • folderUid: необязательно, UID папки, в которой хранится элемент библиотеки; пустая строка, если он находится на корневом уровне.
  • name: необязательно, имя элемента библиотеки.
  • model: модель JSON для элемента библиотеки.
  • kind: тип элемента для создания. Используйте 1 для библиотечных панелей.
  • uid: необязательно, уникальный идентификатор.

Пример запроса:

http
POST /api/library-elements HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

{
  "uid": "nErXDvCkzz",
  "folderUid": "",
  "name": "Example library panel",
  "model": {...},
  "kind": 1
}

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
    "result": {
        "id": 28,
        "orgId": 1,
        "folderId": 0,
        "folderUid": "",
        "uid": "nErXDvCkzz",
        "name": "Example library panel",
        "kind": 1,
        "type": "",
        "description": "",
        "model": {...},
        "version": 1,
        "meta": {
            "folderName": "General",
            "folderUid": "",
            "connectedDashboards": 0,
            "created": "2021-09-30T09:14:22.378307+02:00",
            "updated": "2021-09-30T09:14:22.378307+02:00",
            "createdBy": {
                "id": 1,
                "name": "admin",
                "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
            },
            "updatedBy": {
                "id": 1,
                "name": "admin",
                "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
            }
        }
    }
}

Коды состояния:

  • 200: Создано
  • 400: Ошибки (например, имя или UID уже существует, некорректный JSON, отсутствующие или недопустимые поля и так далее).
  • 401: Не авторизован
  • 403: Доступ запрещён

Обновление элемента библиотеки

PATCH /api/library-elements/:uid

Обновляет существующий элемент библиотеки, идентифицируемый uid.

Схема тела JSON:

  • folderId: ID папки, в которой хранится элемент библиотеки. Устарел начиная с Grafana v9
  • folderUid: UID папки, в которой хранится элемент библиотеки; пустая строка, если он находится на корневом уровне.
  • name: имя элемента библиотеки.
  • model: модель JSON для элемента библиотеки.
  • kind: тип элемента для создания. Используйте 1 для библиотечных панелей.
  • version: версия обновляемого элемента библиотеки.
  • uid: необязательно, уникальный идентификатор.

Пример запроса:

http
PATCH /api/library-elements/nErXDvCkzz HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

{
  "name": "Renamed library panel",
  "kind": 1,
  "version": 1
}

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
    "result": {
        "id": 28,
        "orgId": 1,
        "folderId": 0,
        "folderUid": "",
        "uid": "nErXDvCkzz",
        "name": "Renamed library panel",
        "kind": 1,
        "type": "",
        "description": "",
        "model": {
            "description": "",
            "type": ""
        },
        "version": 2,
        "meta": {
            "folderName": "General",
            "folderUid": "",
            "connectedDashboards": 0,
            "created": "2021-09-30T09:14:22+02:00",
            "updated": "2021-09-30T09:25:57.697214+02:00",
            "createdBy": {
                "id": 1,
                "name": "admin",
                "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
            },
            "updatedBy": {
                "id": 1,
                "name": "admin",
                "avatarUrl": "/avatar/46d229b033af06a191ff2267bca9ae56"
            }
        }
    }
}

Коды состояния:

  • 200: Обновлено
  • 400: Ошибки (например, имя или UID уже существует, некорректный JSON, отсутствующие или недопустимые поля и так далее).
  • 401: Не авторизован
  • 403: Доступ запрещён
  • 404: Элемент библиотеки не найден
  • 412: Несовпадение версий

Удаление элемента библиотеки

DELETE /api/library-elements/:uid

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

Note

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

Пример запроса:

http
DELETE /api/library-elements/nErXDvCkzz HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
    "message": "Library element deleted",
    "id": 28
}

Коды состояния:

  • 200: Удалено
  • 401: Не авторизован
  • 400: Некорректный запрос
  • 403: Доступ запрещён
  • 404: Элемент библиотеки не найден