MySQL Router 9.0  /  MySQL Router REST API  /  簡易 MySQL Router REST API 指南

6.1 簡易 MySQL Router REST API 指南

本指南設定基本的 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。