A API do Áú»¢¶Ä²© permite que voc¨º, de forma program¨¢tica, receba e modifica as configura??es do Áú»¢¶Ä²©, al¨¦m de prover acesso a dados hist¨®ricos e das m¨¦dias. Ela pode ser utilizada, por exemplo, para:
A API ¨¦ um servi?o web fornecido em conjunto com a Interface Web do Áú»¢¶Ä²©. Esta API utiliza JSON, em sua vers?o 2, e duas formas de trabalho:
Maiores informa??es sobre o protocolo JSON podem ser obtidas em e na .
A API consiste em uma quantidade de m¨¦todos que s?o nominalmente separados como APIs individuais. Cada um destes m¨¦todos executa uma tarefa espec¨ªfica. Por exemplo, o m¨¦todo host.create
pertence ¨¤ API host e ¨¦ utilizada para criar novos hosts. Historicamente as APIs s?o referidas como "classes".
A maioria das APIs possuem quatro m¨¦todos: get
, create
, update
e delete
para, respectivamente, recuperar, criar, atualizar e excluir dados, mas algumas das APIs podem possuir m¨¦todos totalmente diferentes.
Uma vez que voc¨º tenha configurado a interface web do Áú»¢¶Ä²© voc¨º pode utilizar-se de requisi??es HTTP para invocar a API. Para fazer isso voc¨º precisa enviar requisi??es no padr?o HTTP POST para o arquivo api_jsonrpc.php
localizado na raiz da interface web. Por exemplo, se sua instala??o do Áú»¢¶Ä²© est¨¢ no endere?o http://company.com/zabbix, a requisi??o HTTP para o m¨¦todo apiinfo.version
pode ser algo como a seguir:
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}
A requisi??o precisa possuir o cabe?alho com o Content-Type
definido com um destes valores : application/json-rpc
, application/json
ou application/jsonrequest
.
Voc¨º pode utilizar qualquer cliente HTTP ou ferramenta de teste JSON-RPC para requisitar os m¨¦todos da API manualmente, mas n¨®s recomendamos o uso de uma das APIs .
Esta se??o ir¨¢ demonstrar com mais detalhes, atrav¨¦s de exemplos, como trabalhar com a API.
Antes de voc¨º acessar qualquer dado dentro do Áú»¢¶Ä²© voc¨º precisa se autenticar e obter um token de autentica??o. Isso pode ser feito utilizando o m¨¦todo user.login. Vamos supor que voc¨º queira se autenticar como um usu¨¢rio comum do Áú»¢¶Ä²©. A requisi??o JSON a seguir poderia fazer isso:
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}
Vamos olhar mais de perto o objeto de requisi??o. Ele tem as seguintes propriedades:
jsonrpc
- a vers?o do protocolo JSON-RPC utilizado pela API; o Áú»¢¶Ä²© implementa a API usando a vers?o 2;method
- o m¨¦todo a ser chamado na API;params
- os par?metros que ser?o passados para o m¨¦todo da API;id
- um identificador arbitr¨¢rio do pedido;auth
- um token de autentica??o de usu¨¢rio; uma vez que ainda n?o o temos, deve ser definido como null
.Se voc¨º oferecer as credenciais corretamente ,a resposta retornada pela API ser¨¢ o token de autentica??o:
O objeto de resposta cont¨ºm algumas propriedades:
jsonrpc
- novamente, a vers?o do protocolo JSON-RPC;result
- o dado retornado pelo m¨¦todo;id
- identificador da requisi??o corrente.Agora podemos utilizar o token de autentica??o para acessar dados no Áú»¢¶Ä²©. Por exemplo, vamos utilizar o m¨¦todo host.get para recuperar os IDs, nomes e interfaces de todos os hosts que o usu¨¢rio tiver acesso:
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "0424bd59b807674191e7d77572075f33"
}
Observe que a propriedade auth
agora est¨¢ definida com o token de autentica??o que obtivemos atrav¨¦s do m¨¦todo user.login
.
O objeto de resposta ir¨¢ conter o dado sobre os hosts que foi requisitado:
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Áú»¢¶Ä²© server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
Por quest?es de performance, ¨¦ recomendado sempre solicitar somente as propriedades que voc¨º est¨¢ interessado, n?o solicitar propriedades que voc¨º n?o ir¨¢ utilizar nestes momento.
Vamos criar um novo item no "Áú»¢¶Ä²© server" usando os dados que obtivemos atrav¨¦s do m¨¦todo anterior ( host.get
). ISso pode ser feito atrav¨¦s do m¨¦todo item.create:
{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "Free disk space on $1",
"key_": "vfs.fs.size[/home/joe/,free]",
"hostid": "10084",
"type": 0,
"value_type": 3,
"interfaceid": "1",
"delay": 30
},
"auth": "0424bd59b807674191e7d77572075f33",
"id": 3
}
Uma resposta bem sucedida ir¨¢ conter o ID do novo item criado, que poder¨¢ ser utilizado mas pr¨®ximas refer¨ºncias:
O m¨¦todo item.create
tamb¨¦m pode ser utilizado m¨²ltiplos itens em uma mesma chamada, atrav¨¦s de arrays de dados.
At¨¦ este ponto tudo o que tentamos deve ter funcionado corretamente. Mas o que aconteceria se n¨®s tent¨¢ssemos uma chamada incorreta ¨¤ API? Vamos tentar criar outra chamada ao m¨¦todo host.create, mas omitindo a propriedade obrigat¨®ria groups
.
{
"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": 3,
"auth": "0424bd59b807674191e7d77572075f33"
}
A resposta desta requisi??o ir¨¢ conter uma mensagem de erro:
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params.",
"data": "No groups for host \"Linux server\"."
},
"id": 3
}
Se um erro ocorrer, ao inv¨¦s da propriedade result
, a resposta ir¨¢ conter a propriedade error
junto com os dados a seguir:
code
- um c¨®digo de erro;message
- mensagem curta do erro;data
- mensagem mais detalhada do erro.Erros podem ocorrer em diversas situa??es, tal qual, uso incorreto de valores, demora excessiva na sess?o ou tentar acessar objetos inexistentes. Sua aplica??o ter¨¢ que ter a habilidade de tratar corretamente destes erros.
Para simplificar o versionamento da API, a partir do Áú»¢¶Ä²© 2.0.4, a vers?o da API ¨¦ igual a vers?o do Áú»¢¶Ä²©. Voc¨º pode utilizar o m¨¦todo apiinfo.version para localizar a vers?o da API com a qual voc¨º est¨¢ trabalhando. Este m¨¦todo em particular pode ser muito utilizado para ajustar a sua aplica??o para caracter¨ªsticas espec¨ªficas de cada vers?o da API.
N¨®s garantimos compatibilidade retroativa. Quando ocorrem incompatibilidades entre a vers?o mais nova e a anterior, normalmente n¨®s deixamos a antiga funcionalidade como obsoleta na nova vers?o e a removemos ap¨®s algumas vers?es. Ocasionalmente, n¨®s podemos remover caracter¨ªsticas nas vers?es mais novas sem prover a retrocompatibilidade. Por isso ¨¦ importante que voc¨º n?o mantenha o uso de funcionalidades marcadas como obsoletas, migrando os m¨¦todos para as suas alternativas sempre que poss¨ªvel.
Voc¨º pode seguir todas as mudan?as feitas na API em log de altera??o API.
Agora voc¨º sabe o suficiente para come?ar a trabalhar com a API do Áú»¢¶Ä²©, mas n?o pare aqui, temos uma extensiva documenta??o sobre os m¨¦todos »å¾±²õ±è´Ç²Ô¨ª±¹±ð¾±²õ.