Submitting a GET Request to the REST API
For an rpc
command, the general format
of the endpoints is:
scheme://device-name:port/rpc/method[@attributes]/params
scheme
:http
orhttps
method
: The name of any Junos OSrpc
command. Themethod
name is identical to the tag element. For more information, see the Junos XML API Operational Developer Reference.params
: Optional parameter values (name[=value]
).
To authenticate your request, submit the base64-encoded username and password included in the Authorization header:
curl -u "username:password" http://device-name:port/rpc/get-interface-information
To specify rpc
data as a query string
in the URI for GET requests, you can use a ?
following the URI with the &
delimiter
separating multiple arguments, or use the /
delimiter, as shown in these equivalent cURL calls:
For example:
curl -u "username:password" http://device-name:port/rpc/get-interface-information?interface-name=cbp0&snmp-index=1
curl -u "username:password" http://device-name:port/rpc/get-interface-information/interface-name=cbp0/snmp-index=1
HTTP Accept headers can be used to specify the return format using one of the following Content-Type values:
application/xml (the default)
application/json
text/plain
text/html
For example, the following cURL call specifies an output format of JSON:
curl -u "username:password" http://device-name:port/rpc/get-interface-information?interface-name=cbp0 –header "Accept: application/json"
You can also specify the output format using the optional format
parameter.
For example, the <get-software-information>
tag element retrieves software process revision levels. The following
HTTPS GET request executes this command and retrieves the results
in JSON format:
https://device-name:3000/rpc/get-software-information@format=json
The following Python program uses the REST interface to execute
the get-route-engine-information
RPC, extracts
the data from the response, and plots a graph of the CPU load average:
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import requests temp_y = 1 def update_line(num, data, line): if num == 0: return line, global temp_y x_data.append(num) if num is not 0 and num%8 == 1: r = requests.get('scheme://device:port/rpc/get-route-engine-information@format=json', auth=('username', 'password')) if r: temp_y = r.json()["route-engine-information"][0]["route-engine"][0]["load-average-one"][0]["data"] y_data.append(temp_y) line.set_data(x_data, y_data) return line, 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()