OpenStack API 文档使用
文档位置
比较常用的组件
Identity service (keystone): API Reference
Image service (glance): API Reference
Placement service (placement): API Reference
Compute service (nova): API Reference API Guide
Networking service (neutron): API Reference
Object Storage service (swift): API Reference
Block Storage service (cinder): API Reference
Orchestration service (heat): API Reference API Documentation
文档使用教程
以user创建举例
0.查看组件使用API

1.打开组件文档
打开api官网文档,选择要使用的组件的API文档

2.选择API版本
选择需要使用的API版本,有些没有多个API版本的文档会直接进入到详情页面

我们是v3的API 选择v3.0的API进入,进入后是一些介绍,左侧是目录

3.找到需要使用的API介绍
我们要使用API创建用户,所以下滑到Users API的介绍位置
相关功能介绍看图

4.查看API使用方法
我们要创建一个用户,所以说根据介绍看创建用户相关的API,点击detail(细节)
可以看到出现了更多的信息,我们主要看Request(请求)和Response(响应)部分

先看Request(请求)的Parameters(参数)部分

再看Request(请求)的Example(示例)
这里可以看到完整的请求体写法,一般只需挑自己需要的写就行,可选的(Optional)可以不写

接下来看Response(响应)的Parameters(参数)部分
可以看到大体和前面一样,只不过这里展示的是会返回的参数,Optional代表可选返回,使用相关参数才有

然后是Response(响应)的Status Codes(状态码)
可以通过这些查看API的使用是否成功

常见 状态码
| 成功 | |
|---|---|
| 200 | 请求成功 |
| 201 | 资源已创建并可供使用 |
| 204 | 服务器已满足请求 |
| ... | |
| 失败 | |
| 400 | 请求中的某些内容无效 |
| 401 | 用户在发出请求之前必须进行身份验证 |
| 403 | 策略不允许当前用户执行此操作 |
| 404 | 无法找到请求的资源 |
| 409 | 此操作与此资源上的另一个操作冲突 |
| 501 | 服务器要么无法识别请求方法,要么缺少 能够满足请求 |
| ... |
最后是Response(响应)的Example(示例)
这里可以看到响应的完整返回是怎么样的

5.使用示例
# 导入要使用的包
import json
import requests
# 定义基础参数
# ip
ip = "192.168.10.100"
# 定义认证地址
authUrl = f"http://{ip}:5000/v3/auth/tokens"
# 定义认证体(身份认证数据)
authBody = {
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": "admin",
"password": "000000",
"domain": {
"name": "demo"
}
}
}
},
"scope": {
"project": {
"name": "admin",
"domain": {
"name": "demo"
}
}
}
}
}
# 构造请求头
header = {
"X-Auth-Token": requests.post(authUrl, json.dumps(authBody)).headers["X-Subject-Token"],
"Content-Type": "application/json"
}
# 定义api地址,这里是user
userUrl = f"http://{ip}:5000/v3/users"
# 定义请求数据
userBody = {
"user": {
"name": "user-api",
"password": "000000",
"domain_id": "default"
}
}
# 遍历用户列表,删除指定用户(重名用户),避免创建失败
for i in users:
if i["name"] == "user-api":
requests.delete(f"{userUrl}/{i['id']}", headers=header)
# 创建新用户,内容解析为JSON格式,并从中提取 "user" 键对应的值
user = requests.post(userUrl, json.dumps(userBody), headers=header).json()["user"]
# 打印创建的用户信息
for i in user:
print(f"{i}: {user[i]}")