Работа с GraphQL

В данном разделе представлено описание функционала выполнения запросов, мутаций и подписок для взаимодействия с данными системы R-Vision SIEM через GraphQL API. Освещены возможности API, включая выгрузку событий, управление элементами экспертизы, функции экспорта данных. Представлены описания и примеры использования следующего функционала API.

Доступные операции:

  • Выгрузка событий: методы для извлечения данных о событиях, поддерживающие фильтрацию, сортировку и пагинацию.

  • Управление элементами экспертизы: создание, обновление, публикация и удаление элементов экспертизы.

  • Просмотр и управление каталогами: запросы для получения списка каталогов и управления ими.

  • Фильтры и сортировка: применение фильтров для уточнения запросов и настройка порядка сортировки результатов.

  • Пагинация: методы для организации данных в пагинированном виде.

Выполнение запросов

Для выполнения запросов GraphQL, учитывая, что операции GraphQL состоят из многострочного JSON, рекомендуется использовать GraphQL Explorer. В качестве альтернативы можно использовать curl или любую другую HTTP-совместимую библиотеку. Все запросы GraphQL, будь то запросы (queries), мутации (mutations) или подписки (subscriptions) передаются в теле POST-запроса в формате JSON.

Пример использования curl для выполнения GraphQL запроса:

curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" -H "x-tenant-id: YOUR_TENANT_ID" -X POST -d " \
 { \
   \"query\": \"query { yourQueryHere }\" \
 } \
" https://your-rvision-siem-domain/api/graphql

В этом примере:

  • YOUR_ACCESS_TOKEN должен быть заменен на ваш фактический токен доступа к системе R-Vision SIEM.

  • YOUR_TENANT_ID должен быть заменен на идентификатор вашего тенанта в системе.

  • yourQueryHere должен быть заменен на ваш конкретный запрос GraphQL, например, запрос на получение списка событий или информации о специфическом объекте.

  • URL your-rvision-siem-domain/api/graphql представляет собой конечную точку для доступа к GraphQL API вашей системы R-Vision SIEM и должен быть заменен на актуальный URL вашего API.

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

При отсутствии необходимых разрешений у токена для доступа к запрашиваемому ресурсу, API вернет ошибку с указанием, какие разрешения необходимы для выполнения запроса.

Выгрузка событий

Позволяет осуществлять выгрузку событий через подписку exportSearch, поддерживая фильтрацию, сортировку и пагинацию.

Example 1. Структура подписки exportSearch
subscription {
  exportSearch(
    eventStorageId: String!
    filters: [SearchFilter!]
    limit: Int
    rql: String!
    timePeriod: TimePeriodInput!
  ) {
    __typename
    searchId
    exportResult {
      ... on ExportSearchLimitWarning {
        limitWarning
        __typename
      }
      ... on ExportSearchResult {
        result {
          ... on SearchResultHeaders {
            names
            types
            __typename
          }
          ... on SearchResultRows {
            rows
            __typename
          }
          __typename
        }
        __typename
      }
      __typename
    }
  }
}
Table 1. Параметры подписки exportSearch
Параметр Тип данных Обязателен Описание

eventStorageId

Строка

Да

Идентификатор хранилища событий, указывает источник экспортируемых данных.

filters

Массив [SearchFilter!]

Да

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

limit

Целое число

Нет

Ограничение на количество возвращаемых записей.

rql

Строка

Да

RQL-запрос для фильтрации данных.

timePeriod

Объект TimePeriodInput!

Да

Временной интервал для выгрузки данных.

Рассмотрим структуру подписки:

  • subscription: указывает на тип операции подписки в GraphQL, позволяющее получать данные в реальном времени.

  • exportSearch: имя подписки, используемой для выгрузки данных событий.

  • eventStorageId: обязательный параметр, принимающий идентификатор хранилища событий, из которого будут экспортированы данные.

  • filters: массив фильтров, применяемых к выгрузке. Каждый фильтр задается объектом SearchFilter, который включает поля inverted, name, operation, и value.

  • limit: ограничение на количество возвращаемых записей. Необязательный параметр.

  • rql: строка RQL-запроса, используемая для дополнительной фильтрации выгружаемых данных.

  • timePeriod: временной интервал, за который происходит выгрузка данных. Принимает объект TimePeriodInput с полями from и to, указывающими начало и конец интервала соответственно.

В ответ на подписку возвращаются следующие данные:

  • searchId: идентификатор созданного поиска, по которому происходит выгрузка данных.

  • exportResult: объект, содержащий результат выгрузки. Может представлять предупреждение о превышении лимита ExportSearchLimitWarning или непосредственно результаты поиска ExportSearchResult.

  • ExportSearchLimitWarning содержит поле limitWarning, информирующее о превышении установленного лимита записей.

  • ExportSearchResult включает в себя result, который может быть типом SearchResultHeaders с информацией о заголовках и типах данных или SearchResultRows с собственно данными строк.

Example 2. Пример подписки exportSearch
subscription {
  exportSearch(
    eventStorageId: "34b1b60a-9cce-4a64-b69a-5837a433b730",
    filters: [
      {
        inverted: false,
        name: "collectorId",
        operation: EQ,
        value: "'a7e7a9c3-c69e-460e-967a-1e437601fd71'"
      }
    ],
    limit: 500,
    rql: "",
    timePeriod: {
      from: "2024-02-14T07:19:33.806Z",
      to: "2024-02-14T07:20:33.806Z"
    }
  ) {
    __typename
    searchId
    exportResult {
      ... on ExportSearchLimitWarning {
        limitWarning
        __typename
      }
      ... on ExportSearchResult {
        result {
          ... on SearchResultHeaders {
            names
            types
            __typename
          }
          ... on SearchResultRows {
            rows
            __typename
          }
          __typename
        }
        __typename
      }
      __typename
    }
  }
}

Как работает данная подписка:

  • subscription: определяет начало подписки, которая будет активно слушать изменения и отправлять данные клиенту, как только они станут доступны.

  • exportSearch: имя подписки, которое инициирует процесс выгрузки данных событий из системы.

  • eventStorageId: идентификатор хранилища событий, который указывает, откуда будут экспортироваться данные. В данном случае "34b1b60a-9cce-4a64-b69a-5837a433b730".

  • filters: список фильтров, применяемых к выгрузке. В примере используется один фильтр для поля "collectorId" с операцией сравнения EQ (равно) и значением "'a7e7a9c3-c69e-460e-967a-1e437601fd71'". Фильтр не инвертирован (inverted: false), что означает прямое сравнение.

  • limit: ограничивает количество возвращаемых записей до 500.

  • rql: параметр, представляющий RQL-запрос для дополнительной фильтрации данных. В данном случае он пуст, что означает отсутствие дополнительных условий фильтрации.

  • timePeriod: задает временной интервал для выгрузки данных, начиная с "2024-02-14T07:19:33.806Z" и заканчивая "2024-02-14T07:20:33.806Z".

  • searchId: возвращаемый идентификатор нового поиска, который может использоваться для отслеживания процесса выгрузки.

  • exportResult: объект, содержащий результат выгрузки. Используется фрагмент ExportSearchResult, который может представлять либо предупреждение о превышении лимита (ExportSearchLimitWarning), либо непосредственно результаты поиска (ExportSearchResult).

Параметры ExportSearchResult и SearchResult определяют структуру возвращаемых данных:

  • ExportSearchLimitWarning содержит limitWarning, информирующее о превышении заданного лимита выгрузки.

  • ExportSearchResult включает result, который далее разделяется на SearchResultHeaders с информацией о заголовках и типах данных и SearchResultRows с данными строк.

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

Сохранение черновика элемента экспертизы

Мутация saveExpertiseDraft позволяет сохранить черновик элемента экспертизы в системе.

Example 3. Структура мутации saveExpertiseDraft
mutation {
  saveExpertiseDraft(input: SaveExpertiseDraftInput!) {
    id
    sourceId
    folderId
    type
    name
    description
    draft
    author
    status
    tags
    version
    severity
    createdAt
    updatedAt
    __typename
  }
}
Table 2. Параметры мутации saveExpertiseDraft
Параметр Тип данных Обязателен Описание

folderId

Строка

Да

Идентификатор каталога, в который добавляется черновик.

id

Строка

Нет

Идентификатор существующего элемента экспертизы для обновления.

sourceCode

Строка

Да

Исходный код элемента экспертизы.

type

ExpertiseType

Да

Тип элемента экспертизы, определяющий его категорию или классификацию.

Возвращаемый тип Expertise

Параметр

Описание

id

Уникальный идентификатор элемента экспертизы, генерируемый системой.

sourceId

Идентификатор источника данных для элемента экспертизы.

folderId

Идентификатор каталога, к которому принадлежит объект.

type

Тип элемента экспертизы.

name

Название элемента экспертизы.

description

Описание элемента экспертизы.

draft

Статус черновика объекта.

author

Автор элемента экспертизы.

status

Текущий статус элемента экспертизы.

tags

Массив тегов, ассоциированных с объектом.

version

Версия элемента экспертизы.

severity

Уровень серьезности элемента экспертизы.

createdAt

Дата и время создания объекта.

updatedAt

Дата и время последнего обновления объекта.

__typename

Тип объекта в системе GraphQL.

Example 4. Пример мутации saveExpertiseDraft
mutation {
  saveExpertiseDraft(input: {
    folderId: "1de2e868-768c-4707-bb5e-7de4413f833f",
    id: "01c3b9ef-b1fa-4ff9-a465-c89d43cb537b",
    sourceCode: "Вставьте исходный код элемента экспертизы",
    type: "CORRELATION_RULE"
  }) {
    id
    sourceId
    folderId
    type
    name
    description
    draft
    author
    status
    tags
    version
    severity
    createdAt
    updatedAt
    __typename
  }
}

Как работает данная мутация:

  • mutation: указывает на начало операции мутации.

  • saveExpertiseDraft: имя мутации, используемой для сохранения черновика элемента экспертизы.

  • input: параметр, который принимает данные для сохранения черновика. Эти данные упакованы в объект SaveExpertiseDraftInput.

  • SaveExpertiseDraftInput: входной объект мутации, содержащий необходимые данные для создания или обновления черновика элемента экспертизы. Включает в себя поля, такие как folderId, id, sourceCode, и type.

  • folderId: идентификатор каталога, в который добавляется черновик. Этот параметр обязателен.

  • id: необязательный параметр, указывающий идентификатор существующего элемента экспертизы, если требуется обновление черновика.

  • sourceCode: текстовое содержание кода элемента экспертизы. Обязательный параметр.

  • type: тип элемента экспертизы, определяющий его функциональную принадлежность или категорию. Этот параметр обязателен.

Возвращаемые поля мутации saveExpertiseDraft:

  • id: уникальный идентификатор созданного или обновленного элемента экспертизы.

  • sourceId, folderId, type, name, description: основные атрибуты элемента экспертизы, включая его исходный идентификатор, принадлежность к каталогу, тип, название, и описание.

  • draft: статус черновика объекта, указывающий, находится ли объект в разработке.

  • author: автор элемента экспертизы.

  • status, tags, version, severity: дополнительные атрибуты объекта, такие как его статус, теги, версия и уровень серьезности.

  • createdAt, updatedAt: даты создания и последнего обновления элемента экспертизы.

  • __typename: служебное поле GraphQL, указывающее тип возвращаемого объекта.

Публикация версии элемента экспертизы

Мутация publishExpertise позволяет публиковать версии элементов экспертизы, переводя их из статуса "Черновик" в статус "Опубликовано". Опубликованные объекты становятся доступными для просмотра и использования в рамках системы.

Example 5. Структура мутации publishExpertise
mutation {
  publishExpertise(input: PublishExpertiseInput!) {
    id
    sourceId
    folderId
    type
    name
    description
    draft
    author
    status
    tags
    version
    severity
    createdAt
    updatedAt
    __typename
  }
}
Table 3. Параметры мутации publishExpertise
Параметр Тип данных Обязателен Описание

folderId

Строка

Да

Идентификатор каталога, к которому будет принадлежать опубликованный объект.

id

Строка

Нет

Идентификатор существующего черновика элемента экспертизы.

sourceCode

Строка

Да

Исходный код элемента экспертизы для публикации.

type

ExpertiseType

Да

Тип элемента экспертизы, указывающий на его функциональную категорию.

Возвращаемый тип Expertise

Параметр

Описание

id

Уникальный идентификатор опубликованного элемента экспертизы.

sourceId

Идентификатор источника данных для элемента экспертизы.

folderId

Идентификатор каталога, к которому принадлежит опубликованный объект.

type

Тип опубликованного элемента экспертизы.

name

Название опубликованного элемента экспертизы.

description

Описание опубликованного элемента экспертизы.

draft

Статус черновика, указывающий на стадию разработки объекта.

author

Автор элемента экспертизы.

status

Текущий статус опубликованного элемента экспертизы.

tags

Массив тегов, ассоциированных с элементом экспертизы.

version

Версия элемента экспертизы.

severity

Уровень серьезности элемента экспертизы.

createdAt

Дата и время создания элемента экспертизы.

updatedAt

Дата и время последнего обновления элемента экспертизы.

__typename

Тип объекта в системе GraphQL.

Example 6. Пример мутации publishExpertise
mutation {
  publishExpertise(input: {
    folderId: "1de2e868-768c-4707-bb5e-7de4413f833f",
    id: "01c3b9ef-b1fa-4ff9-a465-c89d43cb537b",
    sourceCode: "Вставьте исходный код элемента экспертизы",
    type: CORRELATION_RULE
  }) {
    id
    sourceId
    folderId
    type
    name
    description
    draft
    author
    status
    tags
    version
    severity
    createdAt
    updatedAt
    __typename
  }
}

Как работает данная мутация:

  • mutation: указывает на начало операции мутации.

  • publishExpertise: имя мутации для публикации элемента экспертизы.

  • input: параметр, принимающий данные для публикации черновика. Включает в себя folderId, id (если это обновление существующего объекта), sourceCode, и type.

  • folderId: идентификатор каталога для нового элемента экспертизы.

  • id: необязательный параметр, указывающий на существующий элемент экспертизы.

  • sourceCode: исходный код элемента экспертизы.

  • type: тип элемента экспертизы, определяющий его функциональную категорию.

Возвращаемые поля мутации publishExpertise:

  • id: уникальный идентификатор опубликованного элемента экспертизы.

  • sourceId, folderId, type, name, description: основные атрибуты элемента экспертизы, включая его исходный идентификатор, принадлежность к каталогу, тип, название и описание.

  • draft: статус объекта.

  • author: автор элемента экспертизы.

  • status, tags, version, severity: дополнительные атрибуты объекта, такие как его статус, теги, версия и уровень серьезности.

  • createdAt, updatedAt: даты создания и последнего обновления элемента экспертизы.

  • __typename: служебное поле GraphQL, указывающее тип возвращаемого объекта.

Экспорт элементов экспертизы

Запрос exportExpertise предоставляет возможность экспортировать элементы экспертизы, определяемые их уникальными идентификаторами (UUID элемента экспертизы), позволяя пользователям системы сохранить эти данные вне системы.

Example 7. Структура запроса exportExpertise
exportExpertise(ids: [String!]!) {
    content
    contentType
  }
}
Table 4. Параметры запроса exportExpertise
Параметр Тип данных Обязателен Описание

ids

Массив [ID!]

Да

Массив значений UUID элементов экспертизы для экспорта.

Возвращаемый тип ExportExpertiseResponse

Параметр

Описание

content

Содержимое экспортированных элементов экспертизы в формате base64. Клиент должен декодировать это содержимое и сохранить как файл в формате ZIP.

contentType

Тип содержимого, обычно указывается как application/zip, обозначает формат возвращаемого файла экспорта.

Example 8. Пример запроса exportExpertise
query {
  exportExpertise(ids: ["uuid1", "uuid2"]) {
    content
    contentType
  }
}

Этот запрос инициирует экспорт элементов экспертизы с указанными UUID. В ответе предоставляется закодированное содержимое экспортированных объектов в формате base64 и тип содержимого, что позволяет клиенту обработать и сохранить данные в виде ZIP-файла.

Как работает данный запрос:

  • query: указывает на начало операции запроса.

  • exportExpertise: имя запроса, используемого для экспорта элементов экспертизы.

  • ids: параметр запроса, представляющий собой массив UUID элементов экспертизы, которые будут экспортированы.

Возвращаемые поля мутации exportExpertise:

  • content: содержимое экспортированных объектов в формате base64, позволяет пользователям декодировать и сохранить информацию в виде файла.

  • contentType: тип содержимого экспорта, указывающий на формат файла (например, application/zip для ZIP-архивов).

Просмотр каталогов

Запрос resourceFolders предлагает обзор всех каталогов, содержащих элементы экспертизы в системе.

Example 9. Структура запроса resourceFolders
query {
  resourceFolders {
    id
    name
    parentFolderId
    createdAt
    updatedAt
    creator {
      id
      name
    }
    updater {
      id
      name
    }
  }
}
Возвращаемый тип ResourceFolder

Параметр

Описание

id

Уникальный идентификатор каталога.

name

Название каталога.

parentFolderId

Идентификатор родительского каталога.

createdAt

Дата и время создания каталога.

updatedAt

Дата и время последнего обновления каталога.

creator

Информация о пользователе, создавшем каталог.

updater

Информация о последнем пользователе, обновившем каталог.

Example 10. Пример запроса на получение списка каталогов
query {
  resourceFolders {
    id
    name
    parentFolderId
    createdAt
    updatedAt
    creator {
      name
    }
    updater {
      name
    }
  }
}

Данный запрос возвращает иерархический список всех каталогов, доступных в системе, включая информацию об их создании и последних изменениях.

Просмотр элемента экспертизы

Запрос expertise предоставляет детальную информацию о конкретном элементе экспертизы, идентифицируемом по его уникальному идентификатору в системе.

Example 11. Структура запроса expertise
query {
  expertise(id: ID!) {
    id
    sourceId
    folderId
    type
    name
    description
    draft
    author
    status
    tags
    version
    severity
    createdAt
    updatedAt
    __typename
  }
}
Table 5. Параметры запроса expertise
Параметр Тип данных Обязателен Описание

id

ID!

Да

Уникальный идентификатор элемента экспертизы для получения информации.

Возвращаемый тип Expertise

Параметр

Описание

id

Уникальный идентификатор элемента экспертизы.

sourceId

Идентификатор исходного объекта, если применимо.

folderId

Идентификатор каталога, содержащего элемент экспертизы.

type

Тип элемента экспертизы, указывающий на его функциональную категорию.

name

Название элемента экспертизы.

description

Описание объекта, предоставляющее детальную информацию о его содержании.

draft

Статус черновика, указывающий на текущее состояние объекта.

author

Автор элемента экспертизы.

status

Текущий статус объекта в системе.

tags

Массив тегов, ассоциированных с объектом.

version

Версия элемента экспертизы, отражающая его историю изменений.

severity

Уровень серьезности объекта, определяющий его важность.

createdAt

Дата и время создания объекта.

updatedAt

Дата и время последнего обновления объекта.

__typename

Служебное поле GraphQL, указывающее тип возвращаемого объекта.

Просмотр списка элементов экспертизы

Запрос expertises обеспечивает возможность получения списка элементов экспертизы в системе R-Vision SIEM, поддерживая фильтрацию, сортировку и пагинацию для удобства навигации и анализа.

Example 12. Структура запроса expertises
query {
  expertises(
    filter: ExpertisesFilterInput,
    pagination: PaginationInput,
    sorting: SortingInput
  ) {
    expertises {
      id
      sourceId
      folderId
      type
      name
      description
      draft
      author
      status
      tags
      version
      severity
      createdAt
      updatedAt
      __typename
    }
    pageInfo {
      pagination {
        limit
        offset
        __typename
      }
      totalCount
      __typename
    }
    __typename
  }
}
Table 6. Параметры запроса expertises
Параметр Тип данных Обязателен Описание

filter

ExpertisesFilterInput

Нет

Параметры фильтрации для настройки списка элементов экспертизы.

pagination

PaginationInput

Нет

Параметры пагинации для контроля количества отображаемых результатов.

sorting

SortingInput

Нет

Параметры сортировки для упорядочивания результатов запроса.

Возвращаемый тип Expertises

Параметр

Описание

expertises

Список элементов экспертизы, соответствующих заданным критериям фильтрации, сортировки и пагинации.

pageInfo

Метаинформация о странице, включая общее количество доступных объектов и параметры текущей пагинации.

totalCount

Общее количество элементов экспертизы, соответствующих критериям фильтрации.

__typename

Служебное поле GraphQL, указывающее тип возвращаемого объекта.

Example 13. Пример запроса на получение списка элементов экспертизы
query {
  expertises(
    filter: {
      folder: {
        folderId: "1de2e868-768c-4707-bb5e-7de4413f833f",
        withChildFolders: true
      },
      query: "",
      status: ENABLED,
      type: CORRELATION_RULE
    },
    pagination: {
      limit: 100,
      offset: 0
    },
    sorting: {
      order: DESC,
      orderBy: CREATED_AT
    }
  ) {
    expertises {
      id
      sourceId
      folderId
      type
      name
      description
      draft
      author
      status
      tags
      version
      severity
      createdAt
      updatedAt
      __typename
    }
    pageInfo {
      pagination {
        limit
        offset
        __typename
      }
      totalCount
      __typename
    }
    __typename
  }
}

Этот запрос инициирует вывод списка элементов экспертизы, применяя заданные критерии фильтрации, пагинации и сортировки.

Как работает данный запрос:

  • query: указывает на начало операции запроса.

  • expertises: имя запроса, используемое для получения списка элементов экспертизы.

  • filter: параметр, принимающий критерии фильтрации для применения к запросу. Включает:

    • folder: объект с folderId, указывающий на конкретный каталог, и withChildFolders, указывающий, следует ли включать объекты из дочерних каталогов.

    • query: строка для поиска по элементам экспертизы, в данном примере пустая, что означает отсутствие фильтрации по текстовому запросу.

    • status: фильтр по статусу объектов, в данном случае ENABLED, что указывает на выборку активных объектов.

    • type: фильтр по типу объекта, в данном случае CORRELATION_RULE, ограничивающий выборку объектами определённого типа.

  • pagination: объект с параметрами пагинации, limit устанавливает максимальное количество объектов в ответе, offset — смещение от начала списка.

  • sorting: параметры сортировки результатов запроса, в данном случае сортировка по дате создания (CREATED_AT) в обратном порядке (DESC).

Возвращаемые данные запроса expertises:

  • expertises: массив элементов экспертизы, каждый из которых содержит:

    • id, sourceId, folderId, type, name, description, draft, author, status, tags, version, severity, createdAt, updatedAt: основные атрибуты элемента экспертизы.

    • __typename: служебное поле GraphQL, указывающее тип возвращаемого объекта.

  • pageInfo: объект с информацией о пагинации и общим количеством объектов в ответе, включает:

    • pagination: внутренний объект с текущими параметрами пагинации (limit, offset).

    • totalCount: общее количество доступных элементов экспертизы с учётом применённых фильтров.

    • __typename: служебное поле для объекта пагинации и общего количества.

Удаление элемента экспертизы

Мутация deleteExpertise позволяет удалить элемент экспертизы из системы.

deleteExpertise(input: DeleteExpertiseInput!): DeleteExpertiseResponse!
Параметр Тип данных Обязателен Описание

input

DeleteExpertiseInput

Да

Входные данные для удаления, включая id удаляемого элемента экспертизы.

Table 7. Параметры мутации DeleteExpertiseInput
Параметр Тип данных Обязателен Описание

id

Строка

Да

Идентификатор элемента экспертизы, который требуется удалить.

Table 8. Возвращаемый тип DeleteExpertiseResponse
Параметр Тип данных Обязателен Описание

id

Строка

Да

Идентификатор удаленного элемента экспертизы, подтверждающий успешное выполнение операции.

Пример использования мутации для удаления экспертизы:

mutation {
  deleteExpertise(input: { id: "uniqueExpertiseId" }) {
    id
  }
}

Этот запрос инициирует удаление элемента экспертизы с указанным идентификатором из системы. В ответе возвращается идентификатор удаленного элемента экспертизы.

Фильтры

GraphQL API системы R-Vision SIEM поддерживает использование фильтров для уточненного поиска и отбора данных, возвращаемых при выполнении запросов или подписок. Они могут быть применены к различным полям и поддерживают разнообразные операции сравнения.

Использование фильтров

Для применения фильтров в запросах или подписках, используется параметр filters. Каждый фильтр определяет name поля для фильтрации, operation (тип операции), value (значение для сравнения) и, опционально, inverted (инвертирование условия).

Example 14. Пример запроса с использованием фильтров
query {
  expertises(
    filter: {
      folder: {
        folderId: "1de2e868-768c-4707-bb5e-7de4413f833f",
        withChildFolders: true
      },
      query: "",
      status: ENABLED
      type: CORRELATION_RULE
    },
    pagination: {
      limit: 100,
      offset: 0
    },
    sorting: {
      order: DESC,
      orderBy: CREATED_AT
    }
    ) {
    expertises {
      id
      sourceId
      folderId
      type
      name
      description
      draft
      author
      status
      tags
      version
      severity
      createdAt
      updatedAt
      __typename
    }
    pageInfo {
      pagination {
        limit
        offset
        __typename
      }
      totalCount
      __typename
    }
    __typename
  }
}

Операции сравнения

В фильтрах используются следующие операции сравнения:

  • BETWEEN — между двумя значениями;

  • EQ — равно;

  • GE — больше или равно;

  • GT — больше;

  • IN — входит в перечень;

  • LE — меньше или равно;

  • LIKE — соответствует шаблону;

  • LT — меньше;

  • NE — не равно.

Набор доступных операторов может варьироваться в зависимости от запроса.

Параметры фильтра

Table 9. Параметры фильтра
Параметр Тип Описание

inverted

Логический

Определяет, будет ли условие инвертировано.

name

Строка

Имя поля, по которому применяется фильтр.

operation

Перечисление

Операция сравнения, используемая в фильтре.

value

Строка

Значение для сравнения с полем.

Сортировка и пагинация

В GraphQL API R-Vision SIEM предусмотрены механизмы сортировки и пагинации, позволяющие управлять порядком представления данных и их разбивкой на удобные для восприятия части. Эти механизмы особенно важны при работе с запросами, возвращающими большое количество записей, например, expertises.

Сортировка

Сортировка в запросах GraphQL API R-Vision SIEM позволяет упорядочить результаты запроса по определенным критериям. В запросе expertises параметр sorting используется для указания направления сортировки (order) и поля, по которому следует сортировать (orderBy).

Пример ниже демонстрирует, как можно запросить список экспертиз, отсортированный по дате создания (CREATED_AT) в убывающем порядке (DESC), с применением фильтра и пагинации:

Example 15. Пример запроса с сортировкой
query {
  expertises(
    filter: {
      folder: {
        folderId: "1de2e868-768c-4707-bb5e-7de4413f833f",
        withChildFolders: true
      },
      query: "",
      status: ENABLED,
      type: CORRELATION_RULE
    },
    pagination: {
      limit: 100,
      offset: 0
    },
    sorting: {
      order: DESC,
      orderBy: CREATED_AT
    }
  ) {
    expertises {
      id
      sourceId
      folderId
      type
      name
      description
      draft
      author
      status
      tags
      version
      severity
      createdAt
      updatedAt
      __typename
    }
    pageInfo {
      pagination {
        limit
        offset
        __typename
      }
      totalCount
      __typename
    }
    __typename
  }
}
Table 10. Параметры сортировки
Параметр Тип Описание

order

Перечисление

Направление сортировки, может быть ASC (по возрастанию) или DESC (по убыванию).

orderBy

Строка

Поле, по которому будет проводиться сортировка.

Пагинация

Пример запроса ниже иллюстрирует, как получить список элементов экспертизы с использованием пагинации для ограничения количества возвращаемых записей и управления точкой начала выборки данных:

Example 16. Пример запроса с пагинацией
query {
  expertises(
    filter: {
      folder: {
        folderId: "1de2e868-768c-4707-bb5e-7de4413f833f",
        withChildFolders: true
      },
      query: "",
      status: ENABLED,
      type: CORRELATION_RULE
    },
    pagination: {
      limit: 100,
      offset: 0
    },
    sorting: {
      order: DESC,
      orderBy: CREATED_AT
    }
    ) {
    expertises {
      id
      sourceId
      folderId
      type
      name
      description
      draft
      author
      status
      tags
      version
      severity
      createdAt
      updatedAt
      __typename
    }
    pageInfo {
      pagination {
        limit
        offset
        __typename
      }
      totalCount
      __typename
    }
    __typename
  }
}
Table 11. Параметры пагинации
Параметр Тип Описание

limit

Целое число

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

offset

Целое число

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