本指南将设置一个基本的路由器 REST API,添加基本身份验证,并公开一个用于检查路由器状态的路由。REST API 使用配置部分进行配置,并且需要使用选项来启用和使用 REST API。例如,以下是一个最小的 MySQL 路由器配置文件,它启用了最基本的 REST API 功能
[DEFAULT]
logging_folder=
# Exposes http://127.0.0.1:8081
[http_server]
# Exposes /api/20190715/swagger.json
[rest_api]
典型的路由器配置文件包含其他选项,但本指南重点介绍 REST API。保存此文件(我们的指南假设为 (/foo/mysqlrouter.conf
),启动路由器加载此文件(例如 mysqlrouter -c /foo/mysqlrouter.conf),并确认 http://127.0.0.1:8081/api/20190715/swagger.json
存在。示例 swagger.json
内容
{
"swagger": "2.0",
"info": {
"title": "MySQL Router",
"description": "API of MySQL Router",
"version": "20190715"
},
"basePath": "/api/20190715",
"tags": [],
"paths": {},
"definitions": {}
}
这表明已加载路由器 REST API 插件,并且未启用公开路由和路径的其他插件。检索 swagger.json
不需要身份验证。
API 版本号在未来版本中可能会更改;并且未来版本可能包含检索此 API 整数的功能。
接下来,让我们启用简单的 rest_router
插件来公开 router/status 路径。需要进行身份验证,并且启用身份验证需要额外的配置选项。例如
[DEFAULT]
logging_folder=
# Exposes http://127.0.0.1:8081
[http_server]
# Exposes /api/20190715/swagger.json
[rest_api]
# Exposes /api/20190715/router/status
[rest_router]
require_realm=somerealm
# Exposes /api/20190715/routes/*
#[rest_routing]
#require_realm=somerealm
# Exposes /api/20190715/metadata/*
#[rest_metadata_cache]
#require_realm=somerealm
# Define our realm
[http_auth_realm:somerealm]
backend=somebackend
method=basic
name=Some Realm
# Define our backend; this file must exist and validate
[http_auth_backend:somebackend]
backend=file
filename=/etc/mysqlrouter/mysqlrouter.pwd
路由器使用域进行身份验证,并且 mysqlrouter_passwd 命令行实用程序生成和管理这些用户。例如,这将创建一个名为 someuser 的用户,并将其保存为名为 /etc/mysqlrouter/mysqlrouter.pwd
的新文件
# Generate and save the user/pass
$> mysqlrouter_passwd set /etc/mysqlrouter/mysqlrouter.pwd someuser
Please enter password:
# Optionally list usernames and salted passwords in the file:
$> mysqlrouter_passwd list /etc/mysqlrouter/mysqlrouter.pwd
someuser:$5$43tfYEwobPBLkYDB$XnHyC0uXY1F4f6ryd8Vj5CUnEqcH3tqf4pud9kqIji3
使用我们的新配置文件重新启动路由器会生成不同的 swagger.json
,其中现在包含其 /router/status 路由的 [rest_router] 插件信息
{
"swagger": "2.0",
"info": {
"title": "MySQL Router",
"description": "API of MySQL Router",
"version": "20190715"
},
"basePath": "/api/20190715",
"tags": [
{
"name": "app",
"description": "Application"
}
],
"paths": {
"/router/status": {
"get": {
"tags": [
"app"
],
"description": "Get status of the application",
"responses": {
"200": {
"description": "status of application",
"schema": {
"$ref": "#/definitions/RouterStatus"
}
}
}
}
}
},
"definitions": {
"RouterStatus": {
"type": "object",
"properties": {
"timeStarted": {
"type": "string",
"format": "data-time"
},
"processId": {
"type": "integer"
},
"version": {
"type": "string"
},
"hostname": {
"type": "string"
},
"productEdition": {
"type": "string"
}
}
}
}
}
加载 http://127.0.0.1:8081/api/20190715/router/status 会提示输入用户名和密码(我们在示例中创建的),成功后将返回路由器的当前状态。例如
{
"processId": 1883,
"productEdition": "MySQL Community - GPL",
"timeStarted": "2022-01-25T21:23:50.442399Z",
"version": "9.0.0",
"hostname": "boat"
}
我们设置了一个具有经过身份验证的后端的简单路由器 REST API;一个启用了两个 REST API 插件的 REST API。