Enviar uma solicitação GET à REST API
Para um rpc comando, o formato geral dos endpoints é:
scheme://device-name:port/rpc/method[@attributes]/params
-
scheme:httpouhttps -
method: O nome de qualquer comando junos OSrpc. Omethodnome é idêntico ao elemento tag. Para obter mais informações, veja o Junos XML API Explorer. -
params: Valores de parâmetro opcionais (name[=value]).
Para autenticar sua solicitação, você pode usar um dos seguintes métodos. Recomendamos usar a opção netrc porque ela é mais segura.
-
Envie o nome de usuário e a senha com código base64 incluídos no cabeçalho de autorização.
curl -u "username:password" http://device-name:port/rpc/get-interface-information -
Alternativamente, use um arquivo .netrc para armazenar as credenciais.
No diretório de casa do usuário, crie o arquivo .netrc e especifique o nome de host, nome de usuário e senha para o dispositivo remoto. Por exemplo:
user@host:~$ cat ~/.netrc machine 172.16.2.1 login username password password
Certifique-se de que apenas o usuário tenha lido e escreva permissão para o arquivo.
user@host:~$ chmod 600 .netrc
Na solicitação, especifique a opção
--netrc. Por exemplo:user@host:~$ curl --netrc http://172.16.2.1:3000/rpc/get-interface-information
Para especificar rpc dados como uma string de consulta no URI para solicitações get, você pode usar um ? URI a seguir com o & delimiter separando vários argumentos ou usar o / delimiter, conforme mostrado nessas chamadas cURL equivalentes:
Por exemplo:
curl --netrc http://device-name:port/rpc/get-interface-information?interface-name=cbp0&snmp-index=1curl --netrc http://device-name:port/rpc/get-interface-information/interface-name=cbp0/snmp-index=1
Os cabeçalhos DE ACEITAÇÃO DE HTTP podem ser usados para especificar o formato de devolução usando um dos seguintes valores do tipo de conteúdo:
-
aplicativo/xml (o padrão)
-
aplicativo/json
-
texto/simples
-
texto/html
Por exemplo, a chamada cURL a seguir especifica um formato de saída do JSON:
curl --netrc http://device-name:port/rpc/get-interface-information?interface-name=cbp0 --header "Accept: application/json"
Você também pode especificar o formato de saída usando o parâmetro opcional format do Junos OS RPC.
Por exemplo, o <get-software-information> elemento tag recupera os níveis de revisão do processo de software. A solicitação HTTPS GET a seguir executa este comando e recupera os resultados no formato JSON:
https://device-name:port/rpc/get-software-information@format=json
O programa Python a seguir usa a interface REST para executar o get-route-engine-information RPC, extrai os dados da resposta e traça um gráfico da média de carga da CPU. O requests módulo verifica automaticamente o arquivo .netrc do usuário em busca de credenciais associadas ao dispositivo especificado. Como alternativa, você pode incluir o auth=(username, password ) argumento na solicitação para fornecer credenciais.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import requests
def update_line(num, data, line):
if num == 0:
return line,
global temp_y
x_data.append(num)
if num != 0 and num%8 == 1:
r = requests.get('http://' + device + '/rpc/get-route-engine-information@format=json')
if r: temp_y = r.json()['route-engine-information'][0]['route-engine'][0]['load-average-one'][0]['data']
y_data.append(float(temp_y))
line.set_data(x_data, y_data)
return line,
device = input('Enter device:port ')
temp_y = 1
fig1 = plt.figure()
x_data = []
y_data = []
l, = plt.plot([], [])
plt.xlim(0, 80)
plt.ylim(0, 1.5)
plt.xlabel('Time in seconds')
plt.ylabel('CPU utilization (load average)')
plt.title('REST-API test')
line_ani = animation.FuncAnimation(fig1, update_line, 80, fargs=(0, l), interval=1000, blit=True)
plt.show()