Redis 企业软件 REST API 快速入门
Redis 企业软件 REST API 快速入门
Redis Enterprise Software 包含一个 REST API,可让您自动执行某些任务。本文向您介绍如何向 Redis Enterprise Software REST API 发送请求。
基本面
无论您使用哪种方法发送 API 请求,都有一些常见概念需要记住。
| 类型 | 描述 |
|---|---|
| 验证 | 使用基本身份验证和集群用户名(电子邮件)和密码 |
| 端口 | 默认情况下,所有调用均发送到端口 9443 |
| 版本 | 在请求URI中指定版本 |
| 标头 | Accept并且Content-Type应该application/json |
| 响应类型和错误代码 | 响应200 OK表示成功;否则,请求由于错误而失败 |
有关更多信息,请参阅Redis 企业软件 REST API。
cURL 示例请求
cURL是一个命令行工具,允许您从终端发送 HTTP 请求。
您可以使用以下选项来构建 cURL 请求:
| 选项 | 描述 |
|---|---|
| -X | 方法(GET、PUT、PATCH、POST 或 DELETE) |
| -H | 请求头,可指定多次 |
| -u | 用户名和密码信息 |
| -d | PUT 或 POST 请求的 JSON 数据 |
| -F | PUT 或 POST 请求的表单数据,例如POST /v1/modules或POST /v2/modules端点 |
| -k | 关闭 SSL 验证 |
| -我 | 显示标头和状态代码以及响应主体 |
有关更多信息,请参阅cURL 文档。
GET 请求
使用以下 cURL 命令获取具有GET/v1/bdbs/端点的数据库列表。
$ curl -X GET -H "accept: application/json" \
-u "[username]:[password]" \
https://[host][:port]/v1/bdbs -k -i
HTTP/1.1 200 OK
server: envoy
date: Tue, 14 Jun 2022 19:24:30 GMT
content-type: application/json
content-length: 2833
cluster-state-id: 42
x-envoy-upstream-service-time: 25
[
{
...
"name": "tr01",
...
"uid": 1,
"version": "6.0.16",
"wait_command": true
}
]
响应主体中的uid是数据库 ID。您可以使用数据库 ID 通过 API 查看或更新数据库。
有关GET/v1/bdbs/返回的字段的详细信息,请参阅bdbs对象。
PUT 请求
一旦获得了数据库 ID,您就可以使用PUT/v1/bdbs/来更新数据库的配置。
例如,您可以将数据库uid1 作为 URL 参数传递,并在发送请求时使用选项-d指定新的name。这会将数据库name从更改tr01为database1:
$ curl -X PUT -H "accept: application/json" \
-H "content-type: application/json" \
-u "cameron.bates@redis.com:test123" \
https://[host]:[port]/v1/bdbs/1 \
-d '{ "name": "database1" }' -k -i
HTTP/1.1 200 OK
server: envoy
date: Tue, 14 Jun 2022 20:00:25 GMT
content-type: application/json
content-length: 2933
cluster-state-id: 43
x-envoy-upstream-service-time: 159
{
...
"name" : "database1",
...
"uid" : 1,
"version" : "6.0.16",
"wait_command" : true
}
有关可以使用PUT/v1/bdbs/更新的字段的更多信息,请参阅bdbs对象。
客户端示例
您还可以使用客户端库以您喜欢的语言发出 API 请求。
要遵循这些示例,您需要:
- Redis Enterprise Software节点
- Python 3 和请求Python 库
- node.js和node-fetch
Python
import json
import requests
# Required connection information - replace with your host, port, username, and password
host = "[host]"
port = "[port]"
username = "[username]"
password = "[password]"
# Get the list of databases using GET /v1/bdbs
bdbs_uri = "https://{}:{}/v1/bdbs".format(host, port)
print("GET {}".format(bdbs_uri))
get_resp = requests.get(bdbs_uri,
auth = (username, password),
headers = { "accept" : "application/json" },
verify = False)
print("{} {}".format(get_resp.status_code, get_resp.reason))
for header in get_resp.headers.keys():
print("{}: {}".format(header, get_resp.headers[header]))
print("\n" + json.dumps(get_resp.json(), indent=4))
# Rename all databases using PUT /v1/bdbs
for bdb in get_resp.json():
uid = bdb["uid"] # Get the database ID from the JSON response
put_uri = "{}/{}".format(bdbs_uri, uid)
new_name = "database{}".format(uid)
put_data = { "name" : new_name }
print("PUT {} {}".format(put_uri, json.dumps(put_data)))
put_resp = requests.put(put_uri,
data = json.dumps(put_data),
auth = (username, password),
headers = { "content-type" : "application/json" },
verify = False)
print("{} {}".format(put_resp.status_code, put_resp.reason))
for header in put_resp.headers.keys():
print("{}: {}".format(header, put_resp.headers[header]))
print("\n" + json.dumps(put_resp.json(), indent=4))
有关更多信息,请参阅Python 请求库文档。
输出
$ python rs_api.py
python rs_api.py
GET https://[host]:[port]/v1/bdbs
InsecureRequestWarning: Unverified HTTPS request is being made to host '[host]'.
Adding certificate verification is strongly advised.
See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
warnings.warn(
200 OK
server: envoy
date: Wed, 15 Jun 2022 15:49:43 GMT
content-type: application/json
content-length: 2832
cluster-state-id: 89
x-envoy-upstream-service-time: 27
[
{
...
"name": "tr01",
...
"uid": 1,
"version": "6.0.16",
"wait_command": true
}
]
PUT https://[host]:[port]/v1/bdbs/1 {"name": "database1"}
InsecureRequestWarning: Unverified HTTPS request is being made to host '[host]'.
Adding certificate verification is strongly advised.
See: https://urllib3.readthedocs.io/en/1.26.x/advanced-usage.html#ssl-warnings
warnings.warn(
200 OK
server: envoy
date: Wed, 15 Jun 2022 15:49:43 GMT
content-type: application/json
content-length: 2933
cluster-state-id: 90
x-envoy-upstream-service-time: 128
{
...
"name" : "database1",
...
"uid" : 1,
"version" : "6.0.16",
"wait_command" : true
}
节点.js
import fetch, { Headers } from 'node-fetch';
import * as https from 'https';
const HOST = '[host]';
const PORT = '[port]';
const USERNAME = '[username]';
const PASSWORD = '[password]';
// Get the list of databases using GET /v1/bdbs
const BDBS_URI = `https://${HOST}:${PORT}/v1/bdbs`;
const USER_CREDENTIALS = Buffer.from(`${USERNAME}:${PASSWORD}`).toString('base64');
const AUTH_HEADER = `Basic ${USER_CREDENTIALS}`;
console.log(`GET ${BDBS_URI}`);
const HTTPS_AGENT = new https.Agent({
rejectUnauthorized: false
});
const response = await fetch(BDBS_URI, {
method: 'GET',
headers: {
'Accept': 'application/json',
'Authorization': AUTH_HEADER
},
agent: HTTPS_AGENT
});
const responseObject = await response.json();
console.log(`${response.status}: ${response.statusText}`);
console.log(responseObject);
// Rename all databases using PUT /v1/bdbs
for (const database of responseObject) {
const DATABASE_URI = `${BDBS_URI}/${database.uid}`;
const new_name = `database${database.uid}`;
console.log(`PUT ${DATABASE_URI}`);
const response = await fetch(DATABASE_URI, {
method: 'PUT',
headers: {
'Authorization': AUTH_HEADER,
'Content-Type': 'application/json'
},
body: JSON.stringify({
'name': new_name
}),
agent: HTTPS_AGENT
});
console.log(`${response.status}: ${response.statusText}`);
console.log(await(response.json()));
}
查看node-fetch 文档以了解更多信息。
输出
$ node rs_api.js
GET https://[host]:[port]/v1/bdbs
200: OK
[
{
...
"name": "tr01",
...
"slave_ha" : false,
...
"uid": 1,
"version": "6.0.16",
"wait_command": true
}
]
PUT https://[host]:[port]/v1/bdbs/1
200: OK
{
...
"name" : "tr01",
...
"slave_ha" : true,
...
"uid" : 1,
"version" : "6.0.16",
"wait_command" : true
}