[comment]: # translation:outdated

[comment]: # aside:3

[comment]: # ({d1748010-ebcec779})
# Korzystanie z API Zabbix

[zabbix\_utils](https://github.com/zabbix/python-zabbix-utils/blob/main/README.md) umożliwia korzystanie z [API Zabbix](/manual/api) do zarządzania obiektami Zabbix, w tym tworzenia hostów, aktualizowania pozycji, pobierania zdarzeń i nie tylko.

Żądania API mogą być wykonywane w trybie synchronicznym lub asynchronicznym:

-   W trybie synchronicznym skrypt Python wysyła żądanie i czeka na odpowiedź przed kontynuowaniem działania, co jest odpowiednie dla prostych, sekwencyjnych i przewidywalnych operacji.
-   W trybie asynchronicznym skrypt wysyła żądania bez oczekiwania na każdą odpowiedź, umożliwiając równoległe wykonywanie innych operacji; jest to bardziej efektywne w przypadku wolnych żądań lub dużych partii danych.

Przykłady na tej stronie koncentrują się na trybie synchronicznym, chociaż [tryb asynchroniczny](#asynchronous-mode) opiera się na podobnych wzorcach.
Dodatkowe przykłady są dostępne w repozytorium GitHub [zabbix_utils](https://github.com/zabbix/python-zabbix-utils/tree/main/examples).

[comment]: # ({/d1748010-ebcec779})

[comment]: # ({3d27f26b-8304e91c})
#### Import

Aby używać zabbix\_utils do pracy z API Zabbix, zaimportuj klasę `ZabbixAPI` w swoim skrypcie:

```python
from zabbix_utils import ZabbixAPI
```

::: noteclassic
Jeśli już używasz [biblioteki Python społeczności](https://www.zabbix.com/integrations/python), zazwyczaj możesz zastąpić ten import przez `ZabbixAPI` z zabbix\_utils.
:::

[comment]: # ({/3d27f26b-8304e91c})

[comment]: # ({55f43c13-2fe24fc5})
#### Logowanie

Przed wykonywaniem żądań API należy utworzyć instancję `ZabbixAPI` i zalogować się do Zabbix API.

Wybierz metodę, która najlepiej odpowiada sposobowi zarządzania poświadczeniami.
Możesz użyć nazwy użytkownika i hasła lub [tokenów API](/manual/web_interface/frontend_sections/users/api_tokens).

[comment]: # ({/55f43c13-2fe24fc5})

[comment]: # ({eecbd507-f5ed9f85})
##### Podczas inicjalizacji

Podczas tworzenia instancji `ZabbixAPI` możesz od razu podać adres URL interfejsu webowego Zabbix oraz swoje dane uwierzytelniające:

```python
# Nazwa użytkownika i hasło:
api = ZabbixAPI(url="127.0.0.1/zabbix", user="Admin", password="zabbix")

# Token API:
api = ZabbixAPI(url="127.0.0.1/zabbix", token="your_api_token")
```

Jeśli wolisz pogrupować parametry połączenia, możesz przekazać je jako słownik Pythona i rozpakować go za pomocą składni argumentów nazwanych Pythona:

```python
ZABBIX_AUTH = {
    "url": "127.0.0.1/zabbix",
    "user": "Admin",
    "password": "zabbix"
}

api = ZabbixAPI(**ZABBIX_AUTH)
```

[comment]: # ({/eecbd507-f5ed9f85})

[comment]: # ({5cb46e5e-3bf35a85})
##### Używanie `login()`

Możesz najpierw utworzyć instancję `ZabbixAPI`, podając tylko URL interfejsu webowego Zabbix, a następnie użyć metody `login()` ze swoimi poświadczeniami:

```python
# Nazwa użytkownika i hasło:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# Token API:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(token="your_api_token")
```

[comment]: # ({/5cb46e5e-3bf35a85})

[comment]: # ({ff280370-a8fe2b33})
##### Używanie zmiennych środowiskowych

Możesz najpierw zapisać swoje dane uwierzytelniające jako zmienne środowiskowe, na przykład przy użyciu terminala:

```bash
# Nazwa użytkownika i hasło:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"

# Token:
export ZABBIX_TOKEN="your_api_token"
```

Następnie, jeśli uruchomisz swój skrypt z tej samej sesji terminala, instancja `ZabbixAPI` w skrypcie wymaga jedynie adresu URL interfejsu webowego Zabbix:

```python
api = ZabbixAPI(url="127.0.0.1/zabbix")
```

Możesz również zapisać adres URL w zmiennej środowiskowej:

```bash
# Nazwa użytkownika i hasło:
export ZABBIX_USER="Admin"
export ZABBIX_PASSWORD="zabbix"
export ZABBIX_URL="https://127.0.0.1/zabbix"

# Token:
export ZABBIX_TOKEN="your_api_token"
export ZABBIX_URL="https://127.0.0.1/zabbix"
```

Gdy adres URL i dane uwierzytelniające są już ustawione jako zmienne środowiskowe, instancja `ZabbixAPI` w skrypcie nie wymaga już żadnych argumentów:

```python
api = ZabbixAPI()
```

[comment]: # ({/ff280370-a8fe2b33})

[comment]: # ({b539ed93-326ac077})
#### Wylogowanie

Jeśli zalogowano się przy użyciu nazwy użytkownika i hasła, po zakończeniu operacji API należy wywołać metodę `logout()`:

```python
from zabbix_utils import ZabbixAPI

api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# API actions go here

api.logout()
```

::: noteclassic
Wywołanie metody `logout()` nie jest wymagane podczas używania tokenów API.
:::

[comment]: # ({/b539ed93-326ac077})

[comment]: # ({a94d5334-e970d222})
#### Żądania API

Po zalogowaniu możesz wykonywać dowolne żądania API, wywołując metody opisane w [opisie metod](/manual/api/reference) API Zabbix.

Metody API są wywoływane przy użyciu następującego formatu:

```python
api_instance.zabbix_object.method(parameters)
```

::: noteclassic
Niektóre nazwy metod lub obiektów API Zabbix używają słów, które są słowami zastrzeżonymi w Pythonie (np. `import`).
Aby uniknąć błędów Pythona, podczas używania ich w Pythonie dodaj podkreślenie do nazwy metody lub obiektu (np. `api.configuration.import_`).
:::

Na przykład, aby wyświetlić listę hostów za pomocą [`host.get`](/manual/api/reference/host/get):

```python
# 1. Importuj ZabbixAPI z zabbix_utils:
from zabbix_utils import ZabbixAPI

# 2. Utwórz instancję ZabbixAPI i zaloguj się:
api = ZabbixAPI(url="127.0.0.1/zabbix")
api.login(user="Admin", password="zabbix")

# 3. Pobierz hosty pasujące do filtra:
hosts = api.host.get(
    filter={
        "host": [
            "Zabbix server",
            "Linux server"
        ]
    }
)

# 4. Iteruj po zwróconych hostach i wyświetl szczegóły każdego hosta:
for host in hosts:
    print(host)

# 5. Wyloguj się z API, aby zamknąć sesję:
api.logout()
```

[comment]: # ({/a94d5334-e970d222})

[comment]: # ({7b3e3f97-0e327592})
##### Tryb asynchroniczny

Tryb asynchroniczny pozwala skryptowi wysyłać żądania API bez czekania na zakończenie każdego z nich.
Może to zwiększyć wydajność skryptu, gdy musi on wykonać wiele żądań API lub gdy niektóre żądania zajmują dużo czasu.

Podczas korzystania z trybu asynchronicznego występują istotne różnice w porównaniu z trybem synchronicznym:

-   Zaimportuj moduł `asyncio` języka Python (należy najpierw [zainstalować](/devel/python/install) wymagane zależności).
-   Zaimportuj `AsyncZabbixAPI` zamiast `ZabbixAPI`.
-   Napisz kod wewnątrz funkcji `async`.
-   Używaj `await` podczas wywoływania metod API, w tym `login()` i `logout()`.

::: noteimportant
Podczas tworzenia instancji `AsyncZabbixAPI` nie można zalogować się [podczas inicjalizacji](#during-initialization).
:::

Na przykład, aby wyświetlić listę hostów za pomocą [`host.get`](/manual/api/reference/host/get) w trybie asynchronicznym:

```python
# 1. Zaimportuj asyncio dla trybu asynchronicznego oraz AsyncZabbixAPI z zabbix_utils:
import asyncio
from zabbix_utils import AsyncZabbixAPI

# 2. Zdefiniuj główną funkcję async, w której będą wykonywane wszystkie operacje API:
async def main():

    # 3. Utwórz instancję AsyncZabbixAPI i zaloguj się (wymaga await):
    api = AsyncZabbixAPI(url="127.0.0.1")
    await api.login(user="User", password="zabbix")

    # 4. Pobierz hosty pasujące do filtra (wymaga await):
    hosts = await api.host.get(
        filter={
            "host": [
                "Zabbix server",
                "Linux server"
            ]
        }
    )

    # 5. Iteruj po zwróconych hostach i wypisz szczegóły każdego hosta:
    for host in hosts:
        print(host)

    # 6. Wyloguj się z API, aby zamknąć sesję (wymaga await):
    await api.logout()

# 7. Uruchom główną funkcję async main() przy użyciu pętli zdarzeń asyncio:
asyncio.run(main())
```

[comment]: # ({/7b3e3f97-0e327592})

[comment]: # ({57854c72-5dc3bb95})
#### Przykłady

Poniższe przykłady pokazują typowe zadania API Zabbix z użyciem biblioteki zabbix\_utils.

Dodatkowe przykłady są dostępne w katalogu `examples` repozytorium GitHub [zabbix_utils](https://github.com/zabbix/python-zabbix-utils).

[comment]: # ({/57854c72-5dc3bb95})
