MySQL路由器8.0  / 第 6 章 MySQL Router REST API  /  6.1 一个简单的 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 /stable:8081
[http_server]

# Exposes /api/20190715/swagger.json
[rest_api]

典型的路由器配置文件包含其他选项,但本指南重点关注 REST API。保存这个文件(我们的指南假设为(/foo/mysqlrouter.conf),启动Router加载这个文件(比如mysqlrouter -c /foo/mysqlrouter.conf,确认 /stable: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 插件来公开路由器/状态路径。身份验证是必需的,启用身份验证需要额外的配置选项。例如:

[DEFAULT]
logging_folder=

# Exposes /stable: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"
        }
      }
    }
  }
}

加载 /stable:8081/api/20190715/router/status 提示输入用户名和密码(我们在示例中创建的),成功返回路由器的当前状态。例如:

{
  "processId": 1883,
  "productEdition": "MySQL Community - GPL",
  "timeStarted": "2022-01-25T21:23:50.442399Z",
  "version": "8.0.31",
  "hostname": "boat"
}

我们设置了一个带有经过身份验证的后端的基本 Router REST API;一个启用了两个 REST API 插件的 REST API。