MySQL 路由器 8.4  /  MySQL 路由器 REST API  /  MySQL 路由器 REST API 简单指南

6.1 MySQL 路由器 REST API 简单指南

本指南介绍如何设置基本的路由器 REST API,添加基本身份验证,以及公开一条用于检查路由器状态的路由。REST API 使用配置文件部分进行配置,并需要选项才能启用和使用 REST API。例如,以下是一个启用最基本 REST API 功能的最小 MySQL 路由器配置文件

[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": "8.4.0",
  "hostname": "boat"
}

我们设置了一个具有经过身份验证的后端的简单路由器 REST API;一个启用了两个 REST API 插件的 REST API。