Python RESTful API 클라이언트는 RESTful 서비스의 테스트 개발을 지원하는 REST 테스트 라이브러리와 함께 제공됩니다.
RESTful 클라이언트 프로그램 예:
>>> import urllib2
>>> import json
>>> request = urllib2.Request("https://zfsssa.example:215/api/access/v1", "")
>>> request.add_header("X-Auth-User", "rest_user")
>>> request.add_header("X-Auth-Key", "letmein")
>>> response = urllib2.urlopen(request)
>>> response.getcode()
201
>>> info = response.info()
>>>
opener = urllib2.build_opener(urllib2.HTTPHandler)
>>> opener.addheaders = [("X-Auth-Session", info.getheader("X-Auth-Session")),
... ('Content-Type', 'application/json'), ('Accept', 'appplication/json')]
그런 다음 opener를 사용하여 이미 사전 인증되었으며 JSON 데이터를 보내고 받을 준비가 완료된 요청을 열 수 있습니다.
다음 Python 코드를 사용하여 RESTful API 리소스에서 데이터를 가져올 수 있습니다.
GET 예:
>>> request = urllib2.Request("https://zfssa:215/api/network/v1/routes")
>>> response = opener.open(request)
>>> response.getcode()
200
>>> body = json.loads(response.read())
>>> print json.dumps(body, sort_keys=True, indent=4)
{
"routes": [
{
"destination": "0.0.0.0",
"family": "IPv4",
"gateway": "10.80.231.1",
"href":
"/api/network/v1/routes/ixgbe0,0.0.0.0,10.80.231.1",
"interface": "ixgbe0",
"mask": 0,
"type": "static"
}
]
}
새 리소스를 만드는 Python 코드 예:
>>> action = {'category': 'network'}
>>> post_data = json.dumps(action)
>>> request = urllib2.Request("https://zfssa:215/api/alert/v1/actions", post_data)
>>> request.add_header('Content-Type', 'application/json')
>>> response = opener.open(request)
>>> response.getcode()
201
>>> response.info().getheader('Location')
'/api/alert/v1/actions/actions-001'
>>> body = json.loads(response.read())
>>> print json.dumps(body, sort_keys=True, indent=4)
{
"actions": {
"category": "network",
"datalink_failed": true,
"datalink_ok": true,
"href":
"/api/alert/v1/actions/actions-001",
"ip_address_conflict": true,
"ip_address_conflict_resolved": true,
"ip_interface_degraded": true,
"ip_interface_failed":
true,
"ip_interface_ok": true,
"network_port_down": true,
"network_port_up":
true
}
}
기존 리소스를 수정하는 Python 코드 예:
>>> put_data = '{"ip_address_conflict_resolved": false}'
>>>
request = urllib2.Request("https://zfssa:215/api/alert/v1/actions/actions-001", put_data)
>>> request.add_header('Content-Type', 'application/json')
>>> request.get_method = lambda: 'PUT'
>>> response = opener.open(request)
>>> response.getcode()
202
>>> body = json.loads(response.read())
>>> print json.dumps(body, sort_keys=True, indent=4)
{
"actions": {
"category": "network",
"datalink_failed": true,
"datalink_ok": true,
"href":
"/api/alert/v1/actions/actions-001",
"ip_address_conflict": true,
"ip_address_conflict_resolved": false,
"ip_interface_degraded": true,
"ip_interface_failed":
true,
"ip_interface_ok": true,
"network_port_down": true,
"network_port_up":
true
}
}
기존 리소스를 삭제하는 Python 코드 예:
>>> request = urllib2.Request("https://zfssa:215/api/alert/v1/actions/actions-001")
>>> request.get_method = lambda: 'DELETE'
>>> response = opener.open(request)
>>> response.getcode()
204