Áú»¢¶Ä²©

20 API

Vista general

L'API de Áú»¢¶Ä²© us permet recuperar i modificar la configuraci¨® de Áú»¢¶Ä²© amb programaci¨® i proporciona acc¨¦s a dades hist¨°riques. S'utilitza molt per a:

  • crear noves aplicacions per connectar amb Áú»¢¶Ä²©;
  • integrar Áú»¢¶Ä²© a programari de tercers;
  • automatitzar les tasques rutin¨¤ries.

L'API Áú»¢¶Ä²© ¨¦s una API HTTP, inclosa a la interf¨ªcie web. Empra el protocol JSON-RPC 2.0, que vol dir dues coses:

  • l'API consta d'un conjunt de m¨¨todes diferents;
  • les peticions i respostes entre clients i l'API s¨®n codificades en format JSON.

Trobareu m¨¦s informaci¨® sobre el protocol i JSON a l' i a la .

Estructura

L'API consta d'una s¨¨rie de m¨¨todes que s'agrupen en API separades. Cadascun dels m¨¨todes realitza una tasca espec¨ªfica. Per exemple, el m¨¨tode 'host.create' pertany a l'API Equip i s'empra per crear nous equips. ±á¾±²õ³Ù¨°°ù¾±³¦ament, les API de vegades s'anomenen "classes".

La majoria de les API contenen almenys quatre m¨¨todes: get, create, update i `delete' per recuperar, crear, actualitzar i esborrar dades respectivament, per¨° algunes API poden proporcionar un conjunt de m¨¨todes molt diferent.

Fer peticions

Un cop hagueu configurat la interf¨ªcie web, podeu fer peticions HTTP remotes per cridar a l'API. Per fer-ho, heu d'enviar peticions HTTP POST al fitxer api_jsonrpc.php situat al directori de la interf¨ªcie. Per exemple, si la vostra interf¨ªcie Áú»¢¶Ä²© ¨¦s instal¡¤lada a http://example.com/zabbix, la petici¨® HTTP per cridar al m¨¨tode apiinfo.version pot assemblar-se a:

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

La petici¨® ha de tindre la cap?alera Content-Type establerta en un d'aquests valors: application/json-rpc, application/json o ²¹±è±ô¾±³¦²¹³¦¾±¨®/Âá²õ´Ç²Ô°ù±ð±ç³Ü±ð²õ³Ù.

L'objecte de petici¨® cont¨¦ les propietats seg¨¹ents:

-jsonrpc - la versi¨® del protocol JSON-RPC emprada per l'API (l'API Áú»¢¶Ä²© implementa JSON-RPC versi¨® 2.0); -method - el m¨¨tode de l'API que s'est¨¤ cridant; -params - els par¨¤metres que es passaran al m¨¨tode API; -id - un identificador arbitrari de la petici¨®.

Si la petici¨® ¨¦s correcta, la resposta retornada per l'API hauria de ser aix¨ª:

{
       "jsonrpc": "2.0",
       "result": "7.0.0",
       "id": 1
       }

L'objecte de resposta cont¨¦ les propietats seg¨¹ents:

-jsonrpc - la versi¨® del protocol JSON-RPC; -result - les dades retornades pel m¨¨tode; -id - un identificador de la petici¨® corresponent.

Exemple de flux de treball

La secci¨® seg¨¹ent us guiar¨¤ per alguns exemples d'¨²s amb m¨¦s detall.

´¡³Ü³Ù±ð²Ô³Ù¾±³¦²¹³¦¾±¨®

Per accedir a dades de Áú»¢¶Ä²©, heu de:

  • Emprar un [token API] existent (/manual/web_interface/frontend_sections/administration/general#api-tokens) (creat a la interf¨ªcie Áú»¢¶Ä²© o emprant l'API Token);
  • Emprar un token d'autenticaci¨® obtingut amb el m¨¨tode user.login.

Per exemple, si voleu obtindre un token d'autenticaci¨® nou iniciant la sessi¨® com a usuari Admin est¨¤ndard, la petici¨® JSON seria aix¨ª:

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}'

Si proporcioneu les credencials correctes, la resposta de l'API contindr¨¤ el token d'autenticaci¨® de l'usuari:

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

M¨¨todes d'²¹³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®

Per cap?alera "´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®"

Totes les peticions d'API requereixen una autenticaci¨® o un testimoni d'API. Podeu proporcionar les credencials emprant la cap?alera de petici¨® ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®:

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

Si empreu Apache, potser haureu de canviar la configuraci¨® predeterminada d'Apache a /etc/apache2/apache2.conf afegint la l¨ªnia seg¨¹ent:

SetEnvIf Autoritzation "(.*)" HTTP_AUTHORIZATION=$1

En cas contrari, ¨¦s possible que Apache no envi? la cap?alera ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨® a la petici¨®.

Des de Áú»¢¶Ä²© 7.2.1, la cap?alera ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨® ¨¦s compatible amb les peticions d'origen creuat (). Des de Áú»¢¶Ä²© 7.2.5, l'API de Áú»¢¶Ä²© admet cap?aleres sense de maj¨²scules i min¨²scules (com ara ²¹³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®, ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®i AUTORITZACI? es tracten per igual).

Una cookie "zbx_session" s'empra per autoritzar una petici¨® d'API des de la interf¨ªcie d'usuari de Áú»¢¶Ä²© feta amb JavaScript (des d'un m¨°dul o giny personalitzat).

Recuperaci¨® d'equips

Ara tenim un token d'autenticaci¨® d'usuari v¨¤lid que es pot emprar per accedir a les dades a Áú»¢¶Ä²©. Per exemple, emprem el m¨¨tode host.get per recuperar els ID, els noms d'equips i les interf¨ªcies de tots els equips:

±Ê±ð³Ù¾±³¦¾±¨®:

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

data.json ¨¦s un arxiu que cont¨¦ una consulta JSON. Enlloc d'un arxiu, podeu passar la consulta al camp d'arguments --data.

data.json

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

L'objecte de resposta contindr¨¤ les dades demanades sobre els equips:

{
           "jsonrpc": "2.0",
           "result": [
               {
                   "hostid": "10084",
                   "host": "Áú»¢¶Ä²© server",
                   "interfaces": [
                       {
                           "interfaceid": "1",
                           "ip": "127.0.0.1"
                       }
                   ]
               }
           ],
           "id": 2
       }

Per raons de rendiment, us recomanem que enumereu sempre les propietats de l'objecte que voleu recuperar i eviteu recuperar-ho tot.

Creaci¨® d'un element nou

Creem un nou element a l'equip "Servidor Áú»¢¶Ä²©" emprant les dades que vam obtindre de la petici¨® host.get anterior. Aix¨° es pot fer mitjan?ant el m¨¨tode item.create:

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":"Free disk space on /home/joe/","key_":"vfs.fs.size[/home/joe/,free]","hostid":"10084","type":0,"value_type":3,"interfaceid":"1","delay":30},"id":3}'

Una resposta correcta contindr¨¤ l'ID de l'element que s'acaba de crear, que es pot emprar per fer refer¨¨ncia a l'element en peticions posteriors:

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

El m¨¨tode item.create i altres m¨¨todes de creaci¨® tamb¨¦ poden admetre matrius d'objectes i crear diversos elements amb una ¨²nica crida a l'API.

Crear m¨²ltiples triggers

Si els m¨¨todes de creaci¨® admeten matrius, podem afegir diversos triggers, com ara:

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}'

Una resposta correcta contindr¨¤ els IDs dels triggers acabats de crear:

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

Actualitzar un element

Activa un element; ¨¦s a dir, defineix el seu estat a "0":

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}'

Una resposta correcta contindr¨¤ l'ID de l'element actualitzat:

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

El m¨¨tode item.update, aix¨ª com altres m¨¨todes d'actualitzaci¨®, tamb¨¦ poden admetre matrius d'objectes i actualitzar diversos elements amb una ¨²nica crida a l'API.

Actualitzaci¨® de diversos triggers

Activar m¨²ltiples triggers; ¨¦s a dir, definir el seu estat a "0":

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}'

Una resposta correcta contindr¨¤ els identificadors dels triggers actualitzats:

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

Aquest ¨¦s el m¨¨tode preferit per actualitzar. Alguns m¨¨todes de l'API com host.massupdate permeten fer-ho amb codi m¨¦s senzill, per¨° no es recomana emprar aquests m¨¨todes, ja que s'esborraran en versions futures.

Gesti¨® d'errors

Fins ara, tot el que hem provat ha funcionat b¨¦. Per¨°, qu¨¨ passa si provem a fer una crida incorrecta de l'API? Provem de crear un altre equip cridant al m¨¨tode host.create per¨° ometent el par¨¤metre necessari groups.

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":"host.create","params":{"host":"Linux server","interfaces":[{"type":1,"main":1,"useip":1,"ip":"192.168.3.1","dns":"","port":"10050"}]},"id":7}'

La resposta contindr¨¤, doncs, un missatge d'error:

{
           "jsonrpc": "2.0",
           "error": {
               "code": -32602,
               "message": "Par¨¤metres incorrectes.",
               "data": "No hi ha grups per l'equip \"Linux server\"."
           },
           "id": 7
       }

Si es produeix un error, en lloc de la propietat result, l'objecte de resposta contindr¨¤ una propietat error amb les dades seg¨¹ents:

  • code - un codi d'error;
  • message - un breu resum de l'error;
  • data - un missatge d'error m¨¦s detallat.

Es poden produir errors en diferents casos, com ara emprar valors d'entrada incorrectes, esgotar el temps d'espera d'una sessi¨® o provar d'accedir a objectes que no existeixen. La vostra aplicaci¨® ha d'¨¦sser capa? de gestionar aquests errors.

Versions de l'API

Per simplificar la gesti¨® de versions de l'API, des de la versi¨® de Áú»¢¶Ä²© 2.0.4 l'API t¨¦ la mateixa versi¨® que Áú»¢¶Ä²©. Podeu emprar el m¨¨tode apiinfo.version per esbrinar la versi¨® de l'API amb la qual treballeu. Aix¨° pot ¨¦sser ¨²til per refinar la vostra aplicaci¨® per emprar funcions espec¨ªfiques de la versi¨®.

Áú»¢¶Ä²© garanteix la compatibilitat enrere de les funcions dins d'una versi¨® important. Quan fem canvis incompatibles entre versions principals, normalment Áú»¢¶Ä²© deixa les funcions antigues com a obsoletes a la versi¨® seg¨¹ent i despr¨¦s les suprimim una segona versi¨® m¨¦s enll¨¤. De vegades ¨¦s possible que Áú»¢¶Ä²© tregui la funcionalitat entre les versions principals sense proporcionar compatibilitat amb versions anteriors. ?s important que mai confieu en funcions obsoletes i migreu cap a noves tan bon punt us sigui possible.

Podeu fer un seguiment de tots els canvis de l'API al registre de canvis de l'API.

Lectures complement¨¤ries

Ara coneixeu for?a b¨¦ com treballar amb l'API Áú»¢¶Ä²©, per¨° no us atureu pas! Per aprendre'n m¨¦s, us recomanem consultar la llista d'APIs disponibles.