本指南設定基本的 Router REST API、新增基本驗證,並公開一個路由來檢查 Router 的狀態。REST API 使用組態區段進行設定,且需要選項才能啟用和使用 REST API。例如,以下是一個最簡化的 MySQL Router 組態檔,可啟用最基本的 REST API 功能
[DEFAULT]
logging_folder=
# Exposes http://127.0.0.1:8081
[http_server]
# Exposes /api/20190715/swagger.json
[rest_api]
典型的 Router 組態檔包含其他選項,但本指南重點說明 REST API。儲存此檔案 (我們的指南假設為 (/foo/mysqlrouter.conf
)),載入此檔案啟動 Router (例如 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": {}
}
這表示已載入 Router 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
Router 使用領域進行驗證,而 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
使用我們新的組態檔重新啟動 Router 會產生不同的 swagger.json
,其中現在包含 [rest_router] 外掛程式的 /router/status 路由資訊
{
"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 會提示輸入使用者名稱和密碼 (我們在範例中建立的),成功後會傳回 Router 目前的狀態。例如
{
"processId": 1883,
"productEdition": "MySQL Community - GPL",
"timeStarted": "2022-01-25T21:23:50.442399Z",
"version": "9.0.0",
"hostname": "boat"
}
我們設定了一個具有驗證後端的基礎 Router REST API;啟用兩個 REST API 外掛程式的 REST API。