Как можно передать фильтр в теле запроса?

У меня есть бот на Python, который собирает инциденты в SIEM. Мне нужно добавить фильтр по инфраструктуре, но я не уверен, как это сделать. ID инфраструктуры: 1a6ca328-5600-a001-0000-000000000005. Я пытался использовать `{"filterType": "1a6ca328-5600-a001-0000-000000000005_filter"}` в поле `groups`, но это не сработало. Можете подсказать, где именно мне нужно внести изменения в код, чтобы фильтр заработал? Вот часть кода для вашего ознакомления:

```python
url = settings.base_url + "/api/v2/incidents/"
# фильтр инцидентов
payload = {
    "offset": 0,
    "limit": 50,
    "groups": {"filterType": "no_filter"},
    "timeFrom": last_incident_time.get(),
    "timeTo": None,
    "filterTimeType": "creation",
    "filter": {
        "select": ["key", "name", "category", "type", "status", "created", "assigned"],
        "orderby": [
            {
                "field": "created",
                "sortOrder": "descending"
            },
            {
                "field": "status",
                "sortOrder": "ascending"
            },
            {
                "field": "severity",
                "sortOrder": "descending"
            }
        ]
    },
    "queryIds": ["all_incidents"]
}
headers = {
    **settings.default_header,
    **{"Content-Type": "application/json", "Authorization": "Bearer {0}".format(token)}
}

response = requests.request("POST", url, json=payload, headers=headers, verify=False)

if response.status_code == 401:
    return 401
return response.json()['incidents']
```
  • 5 сентября 2024 г. 6:02
Ответы на вопрос 1
Для того чтобы передать фильтр по инфраструктуре в вашем запросе, вам нужно корректно составить payload. Ваша текущая структура для группы фильтров не подходит. Обычно, если API подразумевает фильтрацию по группам, вам нужно использовать корректный формат для передачи фильтра. 

Попробуем изменить ваше `payload`, чтобы добавить фильтр по инфраструктуре с ID `1a6ca328-5600-a001-0000-000000000005`. В данном случае, давайте предположим, что мы можем добавить фильтр в список `groups`. Вам нужно указать `filterType` правильно.

Вот пример, как можно изменить ваш код:

```python
url = settings.base_url + "/api/v2/incidents/"
# фильтр инцидентов
payload = {
    "offset": 0,
    "limit": 50,
    "groups": {
        "filterType": "infrastructure_filter",   # Убедитесь, что это правильный тип фильтра
        "infrastructureId": "1a6ca328-5600-a001-0000-000000000005"  # ID инфраструктуры
    },
    "timeFrom": last_incident_time.get(),
    "timeTo": None,
    "filterTimeType": "creation",
    "filter": {
        "select": ["key", "name", "category", "type", "status", "created", "assigned"],
        "orderby": [
            {
                "field": "created",
                "sortOrder": "descending"
            },
            {
                "field": "status",
                "sortOrder": "ascending"
            },
            {
                "field": "severity",
                "sortOrder": "descending"
            }
        ]
    },
    "queryIds": ["all_incidents"]
}
headers = {
    **settings.default_header,
    **{"Content-Type": "application/json", "Authorization": "Bearer {0}".format(token)}
}

response = requests.post(url, json=payload, headers=headers, verify=False)

if response.status_code == 401:
    return 401
return response.json()['incidents']
```

В этом примере я изменил `groups` так, чтобы включать информацию о фильтре для инфраструктуры. Возможно, API ожидает другую структуру данных, поэтому убедитесь, что `filterType` и `infrastructureId` соответствуют требованиям вашего API. 

Если это не сработает, вам стоит обратиться к документации API, который вы используете, и узнать, какой формат данных должен быть для фильтров.
Похожие вопросы