[comment]: # translation:outdated

[comment]: # ({7cef99ec-92f30379})
# 20 API

[comment]: # ({/7cef99ec-92f30379})

[comment]: # ({4c63ed8e-13405b49})
### Преглед

Zabbix API вам омогућава да програмски преузмете и модификујете конфигурацију Zabbix-а и пружа приступ историјским подацима.
Широко се користи за:

-  креирање нових апликација за рад са Zabbix-ом;
-  интеграцију Zabbix-а у софтвер треће стране;
-  аутоматизацију рутинских задатака.

Zabbix API је API заснован на HTTP-у и испоручује се као део веб корисничког интерфејса.
Користи JSON-RPC 2.0 протокол, што значи две ствари:

-  API се састоји од скупа засебних метода;
-  захтеви и одговори између клијената и API-ја су кодирани коришћењем JSON формата.

За више информација о протоколу и JSON-у погледајте [JSON-RPC 2.0 спецификацију](http://www.jsonrpc.org/specification) и [почетну страницу JSON формата](http://json.org/).

За више информација о интеграцији Zabbix функционалности у ваше Python апликације, погледајте [zabbix_utils]
(https://github.com/zabbix/python-zabbix-utils) Python апликацију за Zabbix API.

[comment]: # ({/4c63ed8e-13405b49})

[comment]: # ({76e2a1dd-9cb56d09})
### Структура

API се састоји од више метода које су номинално груписане у
одвојене API-је. Свака од метода обавља један специфичан задатак.
На пример, метода `host.create` припада *домаћину* API-ја и користи се
за креирање нових домаћина. Историјски гледано, API-ји се понекад називају
"класе".

::: notetip
Већина API-ја садржи најмање четири методе: `get`,
`create`, `update` and `delete` за преузимање, креирање, ажурирање и
брисање података, али неки API-ји могу пружити потпуно
различит скуп метода.
:::

[comment]: # ({/76e2a1dd-9cb56d09})

[comment]: # ({d3a7ab69-9cb2f5ca})
### Извршавање захтева

Када подесите кориснички интерфејс, можете користити удаљене HTTP захтеве за
позивање API-ја. Да бисте то урадили, потребно је да пошаљете HTTP POST захтеве датотеци
`api_jsonrpc.php` која се налази у директоријуму фронтенда. На пример,
ако је ваш Zabbix фронтенд инсталиран на `https://example.com/zabbix`,
HTTP захтев за позив методе `apiinfo.version` може изгледати овако:

```bash
curl --request POST \
   --url 'https://example.com/zabbix/api_jsonrpc.php' \
   --header 'Content-Type: application/json-rpc' \
   --data '{"jsonrpc":"2.0","method":"apiinfo.version","params":{},"id":1}'
```

Захтев мора имати заглавље `Content-Type` подешено на једну од ових
вредности: `application/json-rpc`, `application/json` или
`application/jsonrequest`.

Објекат захтева садржи следећа својства:

-   `jsonrpc` - верзија JSON-RPC протокола коју користи API (Zabbix API имплементира JSON-RPC верзију 2.0);
-   `method` - API метода која се позива;
-   `params` - параметри који ће бити прослеђени API методи;
-   `id` - произвољни идентификатор захтева.

Ако је захтев исправан, одговор који враћа API требало би да изгледа овако:

```json
{
   "jsonrpc": "2.0",
   "result": "7.4.0",
   "id": 1
}
```

Објекат одговора, заузврат, садржи следећа својства:

-   `jsonrpc` - верзија JSON-RPC протокола;
-   `result` - подаци које враћа метода;
-   `id` - идентификатор одговарајућег захтева.

[comment]: # ({/d3a7ab69-9cb2f5ca})

[comment]: # ({c36376e5-ec5a9f60})
### Пример тока посла

Следећа секција ће вас провести кроз неке примере употребе
детаљније.

[comment]: # ({/c36376e5-ec5a9f60})

[comment]: # ({17ec6118-ef3f5841})
#### Аутентификација

Да бисте приступили било којим подацима у Zabbix-у, морате:

-  користите постојећи [API токен](/manual/web_interface/frontend_sections/users/api_tokens) (направљен у Zabbix корисничком интерфејсу или помоћу [API токена](/manual/api/reference/token));
-  користите токен за аутентификацију добијен методом [user.login](/manual/api/reference/user/login).

На пример, ако желите да добијете нови токен за потврду идентитета тако што ћете се пријавити као стандардним *Админ* корисником, JSON захтев би изгледао овако:

```bash
curl --request POST \
  --url 'https://example.com/zabbix/api_jsonrpc.php' \
  --header 'Content-Type: application/json-rpc' \
 --data '{"jsonrpc":"2.0","method":"user.login","params":{"username":"Admin","password":"zabbix"},"id":1}'
```

Ако сте исправно унели акредитиве, одговор који је вратио API би требало да садржи токен за аутентификацију корисника:

```json
{
   "jsonrpc": "2.0",
    "result": "0424bd59b807674191e7d77572075f33",
    "id": 1
}
```

[comment]: # ({/17ec6118-ef3f5841})

[comment]: # ({d920bab8-37011a71})
#### Методе ауторизације

[comment]: # ({/d920bab8-37011a71})

[comment]: # ({78bcb6bc-130188f5})
##### По заглављу "Овлашћење".

Сви API захтеви захтевају аутентификацију или API токен.
Можете да унесете акредитиве користећи заглавље овлашћења у захтеву:

```bash
curl --request POST \
  --url 'https://example.com/zabbix/api_jsonrpc.php' \
  --header 'Authorization: Bearer 0424bd59b807674191e7d77572075f33'
```

::: noteimportant

Ако имате проблема са аутентификацијом, погледајте [Прослеђивање заглавља ауторизације](/manual/installation/known_issues#authorization-header-forwarding).
:::

Zabbix API прихвата заглавља без разликовања великих и малих слова (нпр. `authorization`, `Authorization` и `AUTHORIZATION` се третирају исто).

Заглавље ауторизације је подржано у захтевима из различитих извора ([CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)).

[comment]: # ({/78bcb6bc-130188f5})

[comment]: # ({8a583b03-8950965e})
##### Од Zabbix колачића

Колачић *"zbx_session"* се користи за ауторизацију API захтева са Zabbix корисничког интерфејса који се обавља помоћу JavaScript-а (из модула или 
прилагођеног виџета).

[comment]: # ({/8a583b03-8950965e})

[comment]: # ({ff7434d9-f572ecc2})
#### Преузимање домаћина

Сада имате важећи токен за аутентификацију корисника који се може користити за приступ
подаци у Zabbix-у. На пример, можете користити
[host.get](/manual/api/reference/host/get) метода за преузимање ID-јева,
имена домаћина и интерфејса свих конфигурисаних
[домаћини](/manual/api/reference/host/object):

Захтев:

```bash
curl --request POST \
  --url 'https://example.com/zabbix/api_jsonrpc.php' \
  --header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
  --header 'Content-Type: application/json-rpc' \
  --data @data.json
```

::: notetip
`data.json` је датотека која садржи JSON упит. Уместо датотеке, можете проследити упит у аргументу `--data`.
:::

data.json

```json
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
        "output": [
            "hostid",
            "host"
        ],
        "selectInterfaces": [
            "interfaceid",
            "ip"
        ]
    },
    "id": 2
}
```

Објекат одговора ће садржати тражене податке о хостовима:

```json
{
    "jsonrpc": "2.0",
    "result": [
        {
            "hostid": "10084",
            "host": "Zabbix server",
            "interfaces": [
                {
                    "interfaceid": "1",
                    "ip": "127.0.0.1"
                }
            ]
        }
    ],
    "id": 2
}
```

::: notetip
Из разлога перформанси увек се препоручује да се наведе
својства објекта које желите да преузмете. Тако ћете избећи преузимање свега.
:::

[comment]: # ({/ff7434d9-f572ecc2})

[comment]: # ({c9fda4ae-ee2c324f})
#### Креирање нове ставке

Сада креирајте нову [ставку](/manual/api/reference/item/object) на домаћину "Zabbix
сервер" користећи податке које сте добили од претходног `host.get`
захтев. Ово се може урадити помоћу
[item.create](/manual/api/reference/item/create) метод:

```bash
curl --request POST \
  --url 'https://example.com/zabbix/api_jsonrpc.php' \
  --header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
  --header 'Content-Type: application/json-rpc' \
  --data '{"jsonrpc":"2.0","method":"item.create","params":{"name":"Слободан простор на диску укључен /home/joe/","key_":"vfs.fs.size[/home/joe/,free]","hostid":"10084","type":0,"value_type":3,"interfaceid":"1","delay":30},"id":3}'
```

Успешан одговор ће садржати ID новонастале ставке,
који се може користити за референцу на ставку у следећим захтевима:

```json
{
    "jsonrpc": "2.0",
    "result": {
        "itemids": [
            "24759"
        ]
    },
    "id": 3
}
```

::: notetip
Метода `item.create` као и друге *create methods*
такође може прихватити низове објеката и креирати више ставки са једним API позивом.
:::

[comment]: # ({/c9fda4ae-ee2c324f})

[comment]: # ({49a2cbe1-5ed44978})
#### Креирање више окидача

Дакле, ако *методе креирања* прихватају низове, можете додати више
[окидача](/manual/api/reference/trigger/object), на пример, овај:


```bash
curl --request POST \
  --url 'https://example.com/zabbix/api_jsonrpc.php' \
  --header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
  --header 'Content-Type: application/json-rpc' \
  --data '{"jsonrpc":"2.0","method":"trigger.create","params":[{"description":"Processor load is too high on {HOST.NAME}","expression":"last(/Linux server/system.cpu.load[percpu,avg1])>5",},{"description":"Too many processes on {HOST.NAME}","expression":"avg(/Linux server/proc.num[],5m)>300",}],"id":4}'
```

Успешан одговор ће одржати ID-ијеве новонасталих окидача:

```json
{
    "jsonrpc": "2.0",
    "result": {
        "triggerids": [
            "17369",
            "17370"
        ]
    },
    "id": 4
}
```

[comment]: # ({/49a2cbe1-5ed44978})

[comment]: # ({07f914b6-aa174634})
#### Ажурирање ставке

Омогућите ставку тако што ћете поставити њен статус на "0":

```bash
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"item.update","params":{"itemid":"10092","status":0},"id":5}'
```

Успешан одговор ће садржати ID ажуриране ставке:

```json
{
    "jsonrpc": "2.0",
    "result": {
        "itemids": [
            "10092"
        ]
    },
   "id": 5
}
```

::: notetip
Метода `item.update` као и друге *методе ажурирања*
такође може прихватити низове објеката и ажурирати више ставки једним API позивом.
:::

[comment]: # ({/07f914b6-aa174634})

[comment]: # ({bfbd84bd-e217b4a2})
#### Ажурирање неколико окидача

Активирајте више окидача, постављајући њихов статус на "0":

```bash
curl --request POST \
  --url 'https://example.com/zabbix/api_jsonrpc.php' \
  --header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
  --header 'Content-Type: application/json-rpc' \
  --data '{"jsonrpc":"2.0","method":"trigger.update","params":[{"triggerid":"13938","status":0},{"triggerid":"13939","status":0}],"id":6}'
```

Успешан одговор ће садржати ID-ијеве ажурираних окидача:

```json
{
    "jsonrpc": "2.0",
    "result": {
        "triggerids": [
            "13938",
            "13939"
        ]
    },
    "id": 6
}
```

::: notetip
Ово је преферирани метод ажурирања. Неке API методе, као што је `host.massupdate`, дозвољавају писање простијег кода. 
Међутим, не препоручује се коришћење ових метода, јер ће бити уклоњени у будућим издањима.
:::

[comment]: # ({/bfbd84bd-e217b4a2})

[comment]: # ({a9952ff9-7665e280})
#### Обрада грешака

До сада је све што сте покушали функционисало добро. Али шта би се десило ако бисте покушали да извршите погрешан позив API-ју? Покушајте да креирате други хост позивањем [host.create](/manual/api/reference/host/create) али изостављањем обавезног параметра `groups`:

```bash
curl --request POST \
     --url 'https://example.com/zabbix/api_jsonrpc.php' \
     --header 'Ауторизација: Носилац ${AUTHORIZATION_TOKEN}' \
     --header 'Тип садржаја: application/json-rpc' \
     --data '{"jsonrpc":"2.0","method":"host.create","params":{"host":"Linux сервер","interfaces":[{"type":1,"main":1,"useip":1,"ip":"192.168.3.1","dns":"","port":"10050"}]},"id":7}
```

Одговор ће тада садржати грешку порука:

```json
{
     "jsonrpc": "2.0",
     "error": {
     "code": -32602,
     "message": "Неважећи параметри.",
     "data": "Нема група за хост \"Linux сервер\"."
     },
     "id": 7
}
```

Ако је дошло до грешке, уместо својства `result`, објекат responseobject ће садржати својство `error` са следећим подацима:

-   `code` - код грешке;
-   `message`- кратак резиме грешке;
-   `data` - детаљнија порука о грешци.

Грешке се могу јавити у различитим случајевима, као што су коришћење нетачних улазних вредности, истека времена сесије или покушај приступа непостојећим објектима. Ваша апликација би требало да буде у стању да грациозно обрађује ове врсте грешака.

[comment]: # ({/a9952ff9-7665e280})

[comment]: # ({0de672ce-c1074d48})
### API верзије

Да би се поједноставило управљање верзијама API-ја, од Zabbix-а 2.0.4, верзијa API-ја
одговара верзији самог Zabbix-а. Можете користити
[apiinfo.version](/manual/api/reference/apiinfo/version) метод за проналажење
верзијe API-ја са којом радите. Ово може бити корисно за
прилагођавање ваше апликације да користи функције специфичне за верзију.

Zabbix гарантује повратну компатибилност функција унутар главне верзије.
Када правите уназад некомпатибилне промене између главних издања, Zabbix
обично оставља старе функције као застареле у следећем издању, и
уклања их само у издању након тога. Повремено, Zabbix може да уклони
функције између главних издања без давања компатибилности 
уназад. Важно је да се никада не ослањате на застареле
карактеристике и пређете на новије алтернативе што је пре могуће.

::: notetip
Можете пратити све промене направљене у API-ју у
[API евиденцији промена](/manual/api/changes).
:::

[comment]: # ({/0de672ce-c1074d48})

[comment]: # ({77690bd2-dfd7315f})
### Даље читање

Сада имате довољно знања да почнете да радите са Zabbix API-јем, али немојте стати
овде. За даље читање саветујемо вам да погледате [листу
доступних API-ја](/manual/api/reference).

[comment]: # ({/77690bd2-dfd7315f})
