在下例中,我们会创建一个Zone,以展示API使用的基本流程:
登录
使用API的第一步是登录以获取一个Session
UUID,以供后续API调用使用。
PUT zstack/v1/accounts/login
body:
{
"logInByAccount": {
"password": "b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86",
"accountName": "admin"
}
}这里的密码是用sha512哈希后的结果。
API返回如下:
status code: 200
body:
{
"inventory": {
"uuid": "00d038b699b74e76a01705918d48d939",
"accountUuid": "36c27e8ff05c4780bf6d2fa65700f22e",
"userUuid": "36c27e8ff05c4780bf6d2fa65700f22e",
"expiredDate": "Jan 1, 2017 11:31:06 AM",
"createDate": "Jan 1, 2017 9:31:06 AM"
}
}返回内容中包含账户UUID等其他字段,我们需要的session UUID包含在字段uuid中:00d038b699b74e76a01705918d48d939。
创建Zone
POST zstack/v1/zones
headers:
Authorization: OAuth 00d038b699b74e76a01705918d48d939
body:
{
"params": {
"name": "Zone1",
"description": "Test"
}
}
由于创建Zone操作是一个异步API,API返回不是直接的结果,而是一个轮询地址和一个超时时间:
status code: 202
body:
{
"apiTimeout":1800000
"location": "http://localhost:8080/v1/api-jobs/d0345d3ddcae485f8170572b15a2b581"
}
用户需要周期性的轮询API结果:
GET http://localhost:8080/v1/api-jobs/d0345d3ddcae485f8170572b15a2b581
Authorization: OAuth 00d038b699b74e76a01705918d48d939
如果API还未执行完成,上述GET操作得到的仍然是202返回码和上述轮询地址。当操作完成时,得到的结果如下:
status code: 200
body:
{
"inventory": {
"uuid": "f52fe55b64094ceb99b3893a238c4931",
"name": "Zone1",
"description": "Test",
"state": "Enabled",
"type": "zstack",
"createDate": "Jan 1, 2017 9:31:07 AM",
"lastOpDate": "Jan 1, 2017 9:31:07 AM"
}
}查询Zone
要获取创建的Zone的信息,可以用GET查询:
GET zstack/v1/zones/f52fe55b64094ceb99b3893a238c4931
Authorization: OAuth 00d038b699b74e76a01705918d48d939返回:
status code: 200
body:
{
"inventory": {
"uuid": "f52fe55b64094ceb99b3893a238c4931",
"name": "Zone1",
"description": "Test",
"state": "Enabled",
"type": "zstack",
"createDate": "Jan 1, 2017 9:31:07 AM",
"lastOpDate": "Jan 1, 2017 9:31:07 AM"
}
}登出
当所有API调用完毕,我们需要对已登录的session进行登出操作:
DELETE zstack/v1/accounts/sessions/00d038b699b74e76a01705918d48d939返回
status code: 200