MRS SQL 参考
本文档讨论了 MySQL REST 服务 (MRS) DDL - SQL 扩展。MRS DDL - SQL 扩展在 MySQL Shell SQL 处理中添加了一组 MRS 特定的 DDL 语句,以提供一个熟悉的管理界面给 MySQL 开发人员和 DBA。
章节概述
另请参阅
- MySQL REST 服务 - 开发人员指南 - 本书介绍了如何安装和配置 MySQL REST 服务 (MRS),以及如何通过 REST 调用访问数据。
- MySQL REST 服务 - 核心 REST API - 本书提供了在 REST 启用表和视图后,使用 MySQL REST 服务查询和其他操作的示例。
- MySQL REST 服务 - SDK 参考 - 本书介绍了如何使用 MRS 软件开发工具包,并讨论了客户端 API。
1 简介
提供一个对 MySQL 开发人员和 DBA 来说熟悉且能很好地融入其现有流程的管理界面一直是 MySQL REST 服务 (MRS) 的重要目标。
为此,MySQL REST 服务插件直接插入到 MySQL Shell 和 MySQL Shell for VS Code 中。它扩展了可用的 SQL 命令,包括允许以简单、无缝的方式管理 MySQL REST 服务的 DDL (数据定义语言) 语句。
这使得为您的应用程序创建 MySQL REST 服务的过程与创建数据库架构或表一样简单。
示例
以下脚本配置 MySQL REST 服务,创建一个新的 REST 服务 /myService
,并添加一个 REST 架构 /sakila
和一个 REST 对偶视图 /actor
,该视图列出所有演员及其电影标题。
CONFIGURE REST METADATA;
CREATE REST SERVICE /myService;
USE REST SERVICE /myService;
CREATE REST SCHEMA /sakila FROM `sakila`;
USE REST SCHEMA /sakila;
CREATE REST DUALITY VIEW /actor
FROM `sakila`.`actor` AS MyServiceSakilaActor {
actorId: actor_id @SORTABLE,
firstName: first_name,
lastName: last_name,
lastUpdate: last_update,
filmActor: sakila.film_actor @REDUCETO(title) {
film: sakila.film @UNNEST {
title: title
}
} };
注意:在运行上面的 MRS DDL 脚本之前,请确保安装 MySQL sakila 示例数据库架构。
2 配置和创建
2.1 配置 REST 元数据
CONFIGURE REST METADATA 语句用于在 MySQL 服务器实例或 InnoDB 集群/集上执行 MySQL REST 服务的初始配置。
它将创建 mysql_rest_service_metadata
数据库架构。
请注意,用于执行该语句的 MySQL 帐户需要创建数据库架构的必要权限。
语法
configureRestMetadataStatement:
CONFIGURE REST METADATA restMetadataOptions?
;
restMetadataOptions: (
enabledDisabled
| jsonOptions
| updateIfAvailable
)+
;
configureRestMetadataStatement ::=
restMetadataOptions ::=
示例
CONFIGURE REST METADATA;
2.1.1 启用或禁用 MySQL REST 服务
enabledDisabled 选项指定配置操作后是否应启用或禁用 MySQL REST 服务。默认设置为启用 MySQL REST 服务。
enabledDisabled:
ENABLED
| DISABLED
;
enabledDisabled ::=
示例
以下示例配置 MySQL REST 服务并启用它,并在可能的情况下更新元数据架构。
CONFIGURE REST METADATA
ENABLEDUPDATE IF AVAILABLE;
以下示例配置 MySQL REST 服务并启用 GTID 缓存并设置身份验证选项。
CONFIGURE REST METADATA
ENABLED
OPTIONS {"gtid": {
"cache": {
"enable": true,
"refresh_rate": 5,
"refresh_when_increases_by": 500
}
},"authentication": {
"throttling": {
"perAccount": {
"minimumTimeBetweenRequestsInMs": 1500,
"maximumAttemptsPerAccountPerMinute": 5
},"perHost": {
"minimumTimeBetweenRequestsInMs": 1500,
"maximumAttemptsPerAccountPerMinute": 5
},"blockWhenAttemptsExceededInSeconds": 120
}
} };
2.1.2 REST 配置 Json 选项
jsonOptions 允许为服务设置多个特定选项。
jsonOptions:
OPTIONS jsonValue
;
jsonOptions ::=
这些选项可以包含以下 JSON 键。
authentication
- 定义对所有 MySQL 路由器有效的全局身份验证参数
throttling
- 用于限制身份验证尝试,以防止对帐户信息的暴力攻击
perAccount
- 每个 MRS 帐户适用的设置
minimumTimeBetweenRequestsInMs
- 设置连接尝试之间的最短时间。如果客户端尝试比该时间快进行身份验证,则请求将被拒绝。该值以毫秒为单位。
maximumAttemptsPerAccountPerMinute
- 设置每分钟的最大尝试次数。如果客户端尝试比该时间更频繁地进行身份验证,则将在
blockWhenAttemptsExceededInSeconds
值中指定的秒数内阻止进一步尝试。
- 设置每分钟的最大尝试次数。如果客户端尝试比该时间更频繁地进行身份验证,则将在
perHost
- 每个主机适用的设置,客户端尝试从该主机进行连接
minimumTimeBetweenRequestsInMs
maximumAttemptsPerAccountPerMinute
blockWhenAttemptsExceededInSeconds
- 设置帐户或客户端主机被阻止进行身份验证的时间长度。该值以秒为单位。
gtid
- 使用以下字段定义 MySQL GTID 处理的全局设置。
cache
- 用于配置 MySQL 路由器的 GTID 缓存。
enable
- 如果设置为
true
,则 GTID 将被 MySQL 路由器缓存。
- 如果设置为
refresh_rate
- 定义 GTID 缓存将被刷新的频率。以秒为单位设置,例如 5。
refresh_when_increases_by
- 除了基于时间的刷新之外,GTID 缓存也可以根据自上次刷新以来发生的交易数量进行刷新。以交易数量设置,例如 500。
defaultStaticContent
- 允许为根路径
/
定义静态内容,该内容将针对与给定 JSON 键匹配的文件路径返回。JSON 键index.html
将被 MySQL 路由器作为/index.html
服务。文件内容需要进行 Base64 编码。如果相同的 JSON 键用于defaultStaticContent
以及defaultRedirects
,则重定向优先。
- 允许为根路径
defaultRedirects
- 用于定义 MySQL 路由器执行的内部重定向。这可用于在根路径
/
上公开 REST 服务的内容。JSON 键index.html
包含值/myService/myContentSet/index.html
将从给定路径公开相应文件作为/index.html
。
- 用于定义 MySQL 路由器执行的内部重定向。这可用于在根路径
directoryIndexDirective
- 包含一个有序文件列表,当请求目录路径时应返回这些文件。将返回找到的第一个匹配文件。
directoryIndexDirective
递归应用于 MySQL 路由器公开的所有目录路径。要更改给定 REST 服务或 REST 静态内容集的directoryIndexDirective
,需要为这些对象设置相应的选项。
- 包含一个有序文件列表,当请求目录路径时应返回这些文件。将返回找到的第一个匹配文件。
所有其他键都将被忽略,可用于存储有关服务的自定义元数据。在添加自定义键时包含唯一的前缀是一个好习惯,以避免它们被将来的 MRS 选项覆盖。
示例
以下 JsonValue 将定义 /index.html
、/favicon.ico
和 /favicon.svg
的静态内容。它还将指示 MySQL 路由器在请求根路径 /
时返回 /index.html
的内容,例如 https://my.domain.com/
{
"defaultStaticContent": {
"index.html": "PCFET0NUW...",
"favicon.ico": "AAABAAMAM...",
"favicon.svg": "PD94bWwmV..."
},
"directoryIndexDirective": [
"index.html"
]
}
在此示例中,/index.html
到 /myService/myContentSet/index.html
的内部重定向被执行,直接服务于 /myService/myContentSet
的 index.html
页面。这将覆盖 defaultStaticContent
中的 index.html
定义。
这对于直接在根路径 /
上服务特定应用程序很有用。
{
"defaultStaticContent": {
"index.html": "PCFET0NUW...",
"favicon.ico": "AAABAAMAM...",
"favicon.svg": "PD94bWwmV..."
},
"defaultRedirects": {
"index.html": "/myService/myContentSet/index.html"
},
"directoryIndexDirective": [
"index.html"
]
}
2.1.3 更新 MySQL REST 服务元数据架构
如果定义了 updateIfAvailable,则配置操作将包括更新 mysql_rest_service_metadata
数据库架构。
updateIfAvailable:
UPDATE (IF AVAILABLE)?
;
updateIfAvailable ::=
2.2 创建 REST 服务
CREATE REST SERVICE 语句用于创建新的 REST 服务或替换现有的 REST 服务。
MySQL REST 服务支持创建多个单独的 REST 服务。为每个 REST 应用程序创建单独的 REST 服务是一个好习惯。
每个 REST 服务都可以有自己的选项、身份验证应用,并支持不同的身份验证用户集。
语法
createRestServiceStatement:
CREATE (OR REPLACE)? REST SERVICE serviceRequestPath
restServiceOptions?
;
restServiceOptions: (
enabledDisabled
| restAuthentication
| jsonOptions
| comments
)+
;
createRestServiceStatement ::=
restServiceOptions ::=
示例
以下示例创建一个 REST 服务 /myTestService
,该服务只能从 localhost 访问。
CREATE OR REPLACE REST SERVICE /myService
"A simple REST service"; COMMENTS
以下示例创建一个 REST 服务 /myTestService
,该服务只能从 localhost 访问,并且在创建后被禁用。
CREATE OR REPLACE REST SERVICE localhost/myTestService
DISABLED"A REST service that can only be accessed on localhost"; COMMENTS
CREATE OR REPLACE REST SERVICE localhost/myTestService
"A simple REST service"
COMMENTS
AUTHENTICATION"/authentication"
PATH DEFAULT
REDIRECTION VALIDATION DEFAULT
DEFAULT
PAGE CONTENT USER MANAGEMENT SCHEMA DEFAULT
OPTIONS {"headers": {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Headers": "Content-Type, Authorization, X-Requested-With, Origin, X-Auth-Token",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
},"http": {
"allowedOrigin": "auto"
},"logging": {
"exceptions": true,
"request": {
"body": true,
"headers": true
},"response": {
"body": true,
"headers": true
}
},"returnInternalErrorDetails": true,
"includeLinksInResults": false
};
2.2.1 在创建时启用或禁用 REST 服务
enabledDisabled
选项指定 REST 架构在创建后是否应启用或禁用。
enabledDisabled:
ENABLED
| DISABLED
;
enabledDisabled ::=
2.2.2 REST 服务身份验证设置
每个 REST 服务都需要允许特定的身份验证设置。
restAuthentication ::=
- 身份验证路径
- 用于此 REST 服务的身份验证处理的 HTML 路径。指定为 REST 服务路径的子路径。如果没有显式设置,则默认路径为
/authentication
。 - 以下端点将可用于
<service_path>/<auth_path>
/login
/status
/logout
/completed
- 用于此 REST 服务的身份验证处理的 HTML 路径。指定为 REST 服务路径的子路径。如果没有显式设置,则默认路径为
- 身份验证重定向
- 成功或失败登录后,身份验证工作流将重定向到此 URL。指定为 REST 服务路径的子路径。如果未显式设置此选项,则工作流将在
<service_path>/<auth_path>/login?onCompletionRedirect
参数未设置的情况下重定向到<service_path>/<auth_path>/completed
。
- 成功或失败登录后,身份验证工作流将重定向到此 URL。指定为 REST 服务路径的子路径。如果未显式设置此选项,则工作流将在
- 身份验证验证
- 用于验证
<service_path>/<auth_path>/login?onCompletionRedirect
参数的正则表达式。如果设置,这将允许限制应用程序可以为此参数指定的可能 URL。
- 用于验证
- 身份验证页面内容
- 如果设置了此选项,其内容将替换
<service_path>/<auth_path>/completed
页面的页面内容。
- 如果设置了此选项,其内容将替换
2.2.3 REST 服务 Json 选项
jsonOptions 允许为服务设置多个特定选项。
jsonOptions:
OPTIONS jsonValue
;
jsonOptions ::=
这些选项可以包含以下 JSON 键。
headers
- 允许指定 HTTP 标头。有关详细信息,请参阅 HTTP 标头文档。http
allowedOrigin
- 访问控制允许来源(Access-Control-Allow-Origin) HTTP 头部的设置。可以设置为*
、null
、<origin>
或auto
。设置为auto
时,MySQL 路由器将返回发出请求的特定客户端的来源。
日志记录
exceptions
- 是否应记录异常。请求
body
- 是否应记录请求主体的内容。headers
- 是否应记录请求头的内容。
响应
body
- 是否应记录响应主体的内容。headers
- 是否应记录响应头的内容。
returnInternalErrorDetails
- 是否应返回内部错误。这对应用程序开发很有用,但在生产部署中应关闭。includeLinksInResults
- 如果设置为 false,则结果不包括导航链接。defaultStaticContent
- 允许为 REST 服务的请求路径
定义静态内容,该内容将返回给与给定 JSON 密钥匹配的文件路径。如果 REST 服务的请求路径
设置为/myService
,则 JSON 密钥index.html
将被 MySQL 路由器作为/myService/index.html
提供服务。文件内容需要使用 Base64 编码。如果相同的 JSON 密钥用于defaultStaticContent
和defaultRedirects
,则优先执行重定向。defaultRedirects
- 用于定义 MySQL 路由器执行的内部重定向。这可用于公开 REST 服务的请求路径
上的内容。如果 REST 服务的请求路径
设置为/myService
,则包含值为/myService/myContentSet/index.html
的 JSON 密钥index.html
将从给定路径公开相应文件作为/myService/index.html
。directoryIndexDirective
- 包含请求目录路径时应返回的文件的排序列表。将返回第一个可用的匹配文件。directoryIndexDirective
递归地应用于 MySQL 路由器公开的所有目录路径。要更改给定 REST 对象的directoryIndexDirective
,需要为此对象设置相应的选项。
所有其他键都将被忽略,可用于存储有关服务的自定义元数据。在添加自定义键时包含唯一的前缀是一个好习惯,以避免它们被将来的 MRS 选项覆盖。
示例
{
"headers": {
"Access-Control-Allow-Credentials": "true",
"Access-Control-Allow-Headers": "Content-Type, Authorization, X-Requested-With, Origin, X-Auth-Token",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS"
},
"http": {
"allowedOrigin": "auto"
},
"logging": {
"exceptions": true,
"request": {
"body": true,
"headers": true
},
"response": {
"body": true,
"headers": true
}
},
"returnInternalErrorDetails": true,
"includeLinksInResults": false
}
2.2.4 REST 服务注释
注释可以包含 REST 服务的描述。注释字符串的最大长度为 512 个字符。
comments:
COMMENTS quotedText
;
comments ::=
2.3 创建 REST 架构
CREATE REST SCHEMA 语句用于创建新的 REST 架构或替换现有的 REST 架构。每个 REST 架构直接映射到数据库架构,并允许通过 REST 端点公开数据库架构对象(表、视图和存储过程)。
注意:将 REST 架构添加到 REST 服务不会自动通过 REST 公开任何数据库架构对象。需要调用相应的
CREATE REST TABLE
、CREATE REST DUALITY VIEW
、CREATE REST PROCEDURE
ddl 命令来显式地公开数据库架构对象。
每个 REST 架构都属于一个 REST 服务,该服务必须先创建。一个 REST 服务可以包含多个 REST 架构。
每个 REST 架构都可以有自己的选项、身份验证应用程序,并支持不同的身份验证用户集。
语法
createRestSchemaStatement:
CREATE (OR REPLACE)? REST DATABASE schemaRequestPath? (
ON SERVICE? serviceRequestPath
)? FROM schemaName restSchemaOptions?
;
restSchemaOptions: (
enabledDisabled
| authenticationRequired
| itemsPerPage
| jsonOptions
| comments
)+
;
createRestSchemaStatement ::=
restSchemaOptions ::=
示例
以下示例在 REST 服务 /myService
上创建 REST 架构 /sakila
。
CREATE OR REPLACE REST SCHEMA /sakila ON SERVICE /myService
FROM `sakila`
"The sakila schema"; COMMENTS
2.3.1 在创建时启用或禁用 REST 架构
enabledDisabled
选项指定 REST 架构在创建时应启用还是禁用。
enabledDisabled:
ENABLED
| DISABLED
;
enabledDisabled ::=
2.3.2 要求对 REST 架构访问进行身份验证
authenticationRequired
选项指定 REST 架构及其对象是否在访问其 REST 端点之前需要身份验证。
authenticationRequired:
AUTHENTICATION NOT? REQUIRED
;
authenticationRequired ::=
2.3.3 指定默认页面计数
itemsPerPage
选项可用于指定针对此 REST 架构运行的查询返回的默认项目数量。
itemsPerPage:
ITEMS PER PAGE itemsPerPageNumber
;
itemsPerPage ::=
每个 REST 对象也可以单独指定每页的项目数量。
2.3.4 REST 架构 JSON 选项
jsonOptions 允许为服务设置多个特定选项。
jsonOptions:
OPTIONS jsonValue
;
jsonOptions ::=
这些选项可以包含以下 JSON 键。
defaultStaticContent
- 此选项与 REST 配置 JSON 选项 中描述的目的相同。defaultRedirects
- 此选项与 REST 配置 JSON 选项 中描述的目的相同。directoryIndexDirective
- 此选项与 REST 配置 JSON 选项 中描述的目的相同。
所有其他键将被忽略,可用于存储有关架构的自定义元数据。在添加自定义键时,最好包含一个唯一的 前缀,以避免它们被未来的 MRS 选项覆盖。
2.3.5 REST 架构注释
注释可以包含 REST 架构的描述。注释字符串的最大长度为 512 个字符。
comments:
COMMENTS quotedText
;
comments ::=
2.4 创建 REST 二元视图
CREATE REST DUALITY VIEW
语句用于为数据库架构表或视图添加 REST 端点。它们将作为 JSON 二元视图提供服务。
使用 扩展的 GraphQL 语法 定义提供服务的 JSON 文档的结构。这允许以简单易懂的方式定义复杂的 REST 二元视图。有关如何为 REST 二元视图设计 GraphQL 定义,请参阅相应的 GraphQL 部分。
请参阅 MRS 开发人员指南,了解有关 JSON 二元视图 的更多信息。
语法
createRestViewStatement:
CREATE (OR REPLACE)? REST JSON? RELATIONAL?
DUALITY? VIEW viewRequestPath (
ON serviceSchemaSelector
)? AS qualifiedIdentifier (
CLASS restObjectName
)? graphQlCrudOptions? graphQlObj? restObjectOptions?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
restObjectOptions: (
enabledDisabled
| authenticationRequired
| itemsPerPage
| jsonOptions
| comments
| restViewMediaType
| restViewFormat
| restViewAuthenticationProcedure
)+
;
createRestViewStatement ::=
serviceSchemaSelector ::=
restObjectOptions ::=
示例
以下示例为 sakila.city
数据库架构表添加 REST 二元视图。
CREATE REST DUALITY VIEW /city
ON SERVICE /myService SCHEMA /sakila
FROM `sakila`.`city` AS MyServiceSakilaCity {
cityId: city_id @SORTABLE,
city: city,
countryId: country_id,
lastUpdate: last_update };
使用 TypeScript SDK 查询 REST 二元视图将返回以下 JSON 文档。
> myService.sakila.city.findFirst();
ts
{"city": "A Corua (La Corua)",
"links": [
{"rel": "self",
"href": "/myService/sakila/city/1"
},
]"cityId": 1,
"countryId": 87,
"lastUpdate": "2006-02-15 04:45:25.000000",
"_metadata": {
"etag": "EE93452B41984F3F5BBB0395CCB2CED00F5C748FEEA4A36CCD749CC3F85B7CEA"
} }
下一个示例将引用的表 sakila.country
添加到 REST 二元视图。
CREATE OR REPLACE REST DUALITY VIEW /city
ON SERVICE /myService SCHEMA /sakila
FROM `sakila`.`city` AS MyServiceSakilaCity {
cityId: city_id @SORTABLE,
city: city,
countryId: country_id,
lastUpdate: last_update,
country: sakila.country {
countryId: country_id @SORTABLE,
country: country,
lastUpdate: last_update
} };
这就是 REST 二元视图在 VS Code 扩展的 MySQL Shell 中的交互式 MySQL REST 对象对话框中的样子。

对这个新的 REST 端点运行 TypeScript SDK 查询将返回以下 JSON 文档。
> myService.sakila.city.findFirst();
ts
{"city": "A Corua (La Corua)",
"links": [
{"rel": "self",
"href": "/myService/sakila/city/1"
},
]"cityId": 1,
"country": {
"country": "Spain",
"countryId": 87,
"lastUpdate": "2006-02-15 04:44:00.000000"
,
}"countryId": 87,
"lastUpdate": "2006-02-15 04:45:25.000000",
"_metadata": {
"etag": "FFA2187AD4B98DF48EC40B3E807E0561A71D02C2F4F5A3B953AA6CB6E41CAD16"
} }
2.4.1 前提条件
您需要针对由主键 (PK)、外键 (FK) 或唯一键约束 (UK) 相关的表集定义 REST 二元视图。以下规则适用
- 必须在数据库中声明约束。
- 关系类型可以是 1 对 1、1 对 N 和 N 对 M(使用具有两个 FK 的映射表)。N 对 M 关系可以被认为是 1 对 N 和 1 对 1 关系的组合
- 通过 UNNEST 可以将具有 1 对 1 或 N 对 1 关系的两个或多个表的列合并到同一个 JSON 对象中。否则,将创建嵌套的 JSON 对象。
- 具有 1 对 N 关系的表将创建嵌套的 JSON 数组。
- 二元视图中的每个项目都是一个 JSON 对象,它通常是嵌套对象和数组的层次结构。
- 每个应用程序对象都是从源自该视图的底层表的行的一个或多个值构建的。通常,每个表都贡献一个(嵌套的)JSON 对象。
2.4.2 在创建时启用或禁用 REST 二元视图
enabledDisabled
选项指定 REST 二元视图在创建时应启用还是禁用。
enabledDisabled:
ENABLED
| DISABLED
;
enabledDisabled ::=
2.4.3 要求对 REST 二元视图进行身份验证
authenticationRequired
选项指定 REST 二元视图是否在访问其 REST 端点之前需要身份验证。
authenticationRequired:
AUTHENTICATION NOT? REQUIRED
;
authenticationRequired ::=
2.4.4 指定 REST 二元视图的页面计数
itemsPerPage
选项可用于指定针对 REST 二元视图运行的查询返回的项目数量。
itemsPerPage:
ITEMS PER PAGE itemsPerPageNumber
;
itemsPerPage ::=
每个 REST 对象也可以单独指定每页的项目数量。
2.4.5 设置 REST 二元视图的媒体类型
如果此 REST 二元视图返回特定的 MIME 类型,则可以使用 restViewMediaType
选项进行设置。如果 MRS 应该尝试根据文件内容自动检测文件类型,则可以使用 AUTODETECT
选项。
restViewMediaType:
MEDIA TYPE (quotedText | AUTODETECT)
;
restViewMediaType ::=
2.4.6 设置 REST 二元视图的结果格式
REST 二元视图可以返回以下格式之一,可以使用 restViewFormat
选项进行设置。
- FEED:结果 JSON 对象列表
- ITEM:单个结果项
- MEDIA:单个 blob 项。在这种情况下,使用
restViewMediaType
选项设置相应的 MIME 类型。
restViewFormat:
FORMAT (FEED | ITEM | MEDIA)
;
restViewFormat ::=
2.4.7 为 REST 二元视图使用自定义身份验证过程
如果内置身份验证处理不涵盖 REST 二元视图的特定用例,则可以使用自定义 MySQL 存储过程来处理给定用户和请求的 CRUD 操作的身份验证检查。
引用的 MySQL 存储过程必须与数据库架构对象位于同一个架构中,并且必须接受以下参数:(IN user_id BINARY(16), IN schema VARCHAR(255), IN object VARCHAR(255), IN crud_operation VARCHAR(4))
。它需要返回 true
或 false
。
restViewAuthenticationProcedure ::=
2.4.8 定义 REST 二元视图的 GraphQL 定义
graphQlObj:
OPEN_CURLY graphQlPair (COMMA graphQlPair)* CLOSE_CURLY
| OPEN_CURLY CLOSE_CURLY
;
graphQlCrudOptions: (
AT_SELECT
| AT_NOSELECT
| AT_INSERT
| AT_NOINSERT
| AT_UPDATE
| AT_NOUPDATE
| AT_DELETE
| AT_NODELETE
)+
;
graphQlPair:
graphKeyValue COLON qualifiedIdentifier (
AT_IN
| AT_OUT
| AT_INOUT
| AT_NOCHECK
| AT_SORTABLE
| AT_NOFILTERING
| AT_ROWOWNERSHIP
| AT_UNNEST
| AT_DATATYPE OPEN_PAR graphQlDatatypeValue CLOSE_PAR
| graphQlCrudOptions
)? graphQlObj?
;
graphQlValue:
qualifiedIdentifier
| graphQlObj
;
graphQlObj ::=
graphQlCrudOptions ::=
graphQlPair ::=
graphQlValue ::=
2.5 创建 REST 过程
CREATE REST PROCEDURE
语句用于为数据库架构存储过程添加 REST 端点。它使用与 REST 二元视图定义相同的 扩展的 GraphQL 语法 来描述 REST 过程的参数和结果集。请务必学习 相应的节。
语法
createRestProcedureStatement:
CREATE (OR REPLACE)? REST PROCEDURE procedureRequestPath (
ON serviceSchemaSelector
)? AS qualifiedIdentifier (PARAMETERS restObjectName? graphQlObj)?
restProcedureResult* restObjectOptions?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
restObjectOptions: (
enabledDisabled
| authenticationRequired
| itemsPerPage
| jsonOptions
| comments
| restViewMediaType
| restViewFormat
| restViewAuthenticationProcedure
)+
;
restProcedureResult:
RESULT restResultName? graphQlObj
;
createRestProcedureStatement ::=
serviceSchemaSelector ::=
restObjectOptions ::=
restProcedureResult ::=
2.6 创建 REST 内容集
CREATE REST CONTENT SET
语句用于为静态内容添加 REST 端点。
语法
createRestContentSetStatement:
CREATE (OR REPLACE)? REST CONTENT SET
contentSetRequestPath (
ON SERVICE? serviceRequestPath
)? (FROM directoryFilePath)? restContentSetOptions?
;
restContentSetOptions: (
enabledDisabled
| authenticationRequired
| jsonOptions
| comments
)+
;
createRestContentSetStatement ::=
restContentSetOptions ::=
2.7 创建 REST 身份验证应用程序
CREATE REST AUTH APP
语句用于将 REST 身份验证应用程序添加到 REST 服务。
语法
createRestAuthAppStatement:
CREATE (OR REPLACE)? REST (
AUTH
| AUTHENTICATION
) APP authAppName (
ON SERVICE? serviceRequestPath
)? VENDOR (MRS | MYSQL | vendorName) restAuthAppOptions?
;
restAuthAppOptions: (
enabledDisabled
| comments
| allowNewUsersToRegister
| defaultRole
)+
;
allowNewUsersToRegister:
ALLOW NEW USERS (TO REGISTER)?
;
defaultRole:
DEFAULT ROLE quotedText
;
createRestAuthAppStatement ::=
restAuthAppOptions ::=
allowNewUsersToRegister ::=
defaultRole ::=
2.8 创建 REST 用户
CREATE REST USER
语句用于将 REST 用户添加到 REST 身份验证应用程序。
语法
createRestUserStatement:
CREATE (OR REPLACE)? REST USER userName AT_SIGN
authAppName (
ON SERVICE? serviceRequestPath
)? IDENTIFIED BY userPassword
;
createRestUserStatement ::=
3 ALTER
3.1 ALTER REST 服务
可以使用 ALTER REST SERVICE
语句更改现有 REST 服务。它使用与 CREATE REST SERVICE
语句相同的 restServiceOptions
。请参阅有关选项的讨论 此处。
语法
alterRestServiceStatement:
ALTER REST SERVICE serviceRequestPath (
NEW REQUEST PATH newServiceRequestPath
)? restServiceOptions?
;
restServiceOptions: (
enabledDisabled
| restAuthentication
| jsonOptions
| comments
)+
;
alterRestServiceStatement ::=
restServiceOptions ::=
示例
以下示例通过设置新的注释来更改 REST 服务 /myService
。
ALTER REST SERVICE /myService
"A simple, improved REST service"; COMMENTS
3.2 ALTER REST 架构
可以使用 ALTER REST SCHEMA
语句更改现有 REST 架构。它使用与 CREATE REST SCHEMA
语句相同的 restSchemaOptions
。请参阅有关选项的讨论 此处。
语法
alterRestSchemaStatement:
ALTER REST DATABASE schemaRequestPath? (
ON SERVICE? serviceRequestPath
)? (
NEW REQUEST PATH newSchemaRequestPath
)? (FROM schemaName)? restSchemaOptions?
;
restSchemaOptions: (
enabledDisabled
| authenticationRequired
| itemsPerPage
| jsonOptions
| comments
)+
;
alterRestSchemaStatement ::=
restSchemaOptions ::=
示例
以下示例更改 REST 架构 /myService
以使用新的请求路径 /myPublicService
。
ALTER REST SCHEMA /sakila ON SERVICE /myService
NEW REQUEST PATH /myPublicService;
3.3 ALTER REST 对偶视图
ALTER REST DUALITY VIEW
语句用于更改现有的 REST 对偶视图。
请参阅相应的 GraphQL 部分,了解如何为 REST 对偶视图设计 GraphQL 定义。
请参阅 MRS 开发人员指南,了解有关 JSON 二元视图 的更多信息。
语法
alterRestViewStatement:
ALTER REST JSON? RELATIONAL? DUALITY? VIEW
viewRequestPath (ON serviceSchemaSelector)? (
NEW REQUEST PATH newViewRequestPath
)? (
CLASS restObjectName graphQlCrudOptions? graphQlObj?
)? restObjectOptions?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
restObjectOptions: (
enabledDisabled
| authenticationRequired
| itemsPerPage
| jsonOptions
| comments
| restViewMediaType
| restViewFormat
| restViewAuthenticationProcedure
)+
;
alterRestViewStatement ::=
serviceSchemaSelector ::=
restObjectOptions ::=
示例
以下示例更改 sakila.city
数据库模式表 REST 对偶视图并设置新的字段列表。
ALTER REST DUALITY VIEW /city
ON SERVICE /myService SCHEMA /sakila
FROM `sakila`.`city` AS MyServiceSakilaCity {
cityId: city_id @SORTABLE,
city: city };
3.4 ALTER REST 过程
ALTER REST PROCEDURE
语句用于更改数据库模式存储过程的 REST 端点。
它使用与 REST 对偶视图定义相同的 扩展 GraphQL 语法 来描述 REST 过程的参数和结果集。请务必研究 相应部分。
语法
alterRestProcedureStatement:
ALTER REST PROCEDURE procedureRequestPath (
ON serviceSchemaSelector
)? (
NEW REQUEST PATH newProcedureRequestPath
)? (PARAMETERS restObjectName? graphQlObj)? restProcedureResult* restObjectOptions?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
restObjectOptions: (
enabledDisabled
| authenticationRequired
| itemsPerPage
| jsonOptions
| comments
| restViewMediaType
| restViewFormat
| restViewAuthenticationProcedure
)+
;
alterRestProcedureStatement ::=
serviceSchemaSelector ::=
restObjectOptions ::=
4 DROP
4.1 DROP REST 服务
可以使用 DROP REST SERVICE
语句删除现有 REST 服务。
语法
dropRestServiceStatement:
DROP REST SERVICE serviceRequestPath
;
dropRestServiceStatement ::=
示例
以下示例删除请求路径为 /myService
的 REST 服务。
DROP REST SERVICE /myService;
4.2 DROP REST 架构
可以使用 DROP REST SCHEMA
语句删除现有 REST 架构。
语法
dropRestSchemaStatement:
DROP REST DATABASE schemaRequestPath (
FROM SERVICE? serviceRequestPath
)?
;
dropRestSchemaStatement ::=
示例
以下示例删除请求路径为 /myService
的 REST 架构。
DROP REST SCHEMA /sakila FROM SERVICE /myService;
4.3 DROP REST 对偶视图
DROP REST DUALITY VIEW
语句用于删除现有的 REST 对偶视图。
语法
dropRestDualityViewStatement:
DROP REST JSON? RELATIONAL? DUALITY? VIEW
viewRequestPath (FROM serviceSchemaSelector)?
;
dropRestDualityViewStatement ::=
示例
以下示例删除请求路径为 /city
的 REST 对偶视图。
DROP REST DUALITY VIEW /city
FROM SERVICE /myService SCHEMA /sakila;
4.4 DROP REST 过程
DROP REST PROCEDURE
语句用于删除现有的 REST 过程。
语法
dropRestProcedureStatement:
DROP REST PROCEDURE procedureRequestPath (
FROM serviceSchemaSelector
)?
;
dropRestProcedureStatement ::=
4.5 DROP REST 内容集
DROP REST CONTENT SET
语句用于删除现有的 REST 静态内容集。
语法
dropRestContentSetStatement:
DROP REST CONTENT SET contentSetRequestPath (
FROM SERVICE? serviceRequestPath
)?
;
dropRestContentSetStatement ::=
4.6 DROP REST 身份验证应用程序
DROP REST AUTH APP
语句用于从 REST 服务中删除现有的 REST 身份验证应用程序。
语法
dropRestAuthAppStatement:
DROP REST (AUTH | AUTHENTICATION) APP authAppName (
FROM SERVICE? serviceRequestPath
)?
;
dropRestAuthAppStatement ::=
4.7 DROP REST 用户
DROP REST USER
语句用于从 REST 身份验证应用程序中删除现有的 REST 用户。
语法
dropRestUserStatement:
DROP REST USER userName AT_SIGN authAppName (
ON SERVICE? serviceRequestPath
)?
;
dropRestUserStatement ::=
5 USE 和 SHOW
5.1 USE
可以使用 DROP REST SERVICE
语句删除现有 REST 服务。
语法
useStatement:
USE REST serviceAndSchemaRequestPaths
;
serviceAndSchemaRequestPaths:
SERVICE serviceRequestPath
| serviceSchemaSelector
;
useStatement ::=
serviceAndSchemaRequestPaths ::=
示例
以下示例使请求路径为 /myService
的 REST 服务成为新的默认 REST 服务。
USE REST SERVICE /myService;
设置默认 REST 服务后,可以使用以下语句设置默认 REST 架构。
USE REST SCHEMA /sakila;
以下示例显示如何在单个语句中设置默认 REST 服务和 REST 架构。
USE REST SERVICE /myService SCHEMA /sakila;
5.2 SHOW REST STATUS
SHOW REST STATUS
语句用于获取有关 MySQL REST 服务当前状态的基本信息。
语法
showRestMetadataStatusStatement:
SHOW REST METADATA? STATUS
;
showRestMetadataStatusStatement ::=
示例
以下示例删除请求路径为 /myService
的 REST 架构。
SHOW REST STATUS;
5.3 SHOW REST SERVICES
SHOW REST SERVICES
语句列出所有可用的 REST 服务。
语法
showRestServicesStatement:
SHOW REST SERVICES
;
showRestServicesStatement ::=
示例
以下示例列出所有 REST 服务。
SHOW REST SERVICES;
5.4 SHOW REST SCHEMAS
SHOW REST SCHEMAS
语句列出给定或当前 REST 服务的所有可用 REST 架构。
语法
showRestSchemasStatement:
SHOW REST DATABASES (
(IN | FROM) SERVICE? serviceRequestPath
)?
;
showRestSchemasStatement ::=
示例
以下示例列出请求路径为 /myService
的 REST 服务的所有 REST 架构。
FROM /myService; SHOW REST SERVICES
5.5 SHOW REST DUALITY VIEWS
SHOW REST DUALITY VIEWS
语句列出给定或当前 REST 架构的所有可用 REST 对偶视图。
语法
showRestViewsStatement:
SHOW REST JSON? RELATIONAL? DUALITY? VIEWS (
(IN | FROM) serviceSchemaSelector
)?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
showRestViewsStatement ::=
serviceSchemaSelector ::=
示例
以下示例列出给定 REST 架构的所有 REST 对偶视图。
FROM SERVICE /myService SCHEMA /sakila; SHOW REST DUALITY VIEWS
5.6 SHOW REST PROCEDURES
SHOW REST PROCEDURES
语句列出给定或当前 REST 架构的所有可用 REST 过程。
语法
showRestProceduresStatement:
SHOW REST PROCEDURES (
(IN | FROM) serviceSchemaSelector
)?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
showRestProceduresStatement ::=
serviceSchemaSelector ::=
示例
以下示例列出给定 REST 架构的所有 REST 过程。
FROM SERVICE /myService SCHEMA /sakila; SHOW REST PROCEDURES
5.7 SHOW REST CONTENT SETS
SHOW REST CONTENT SETS
语句列出给定或当前 REST 服务的所有可用 REST 内容集。
语法
showRestContentSetsStatement:
SHOW REST CONTENT SETS (
(IN | FROM) SERVICE? serviceRequestPath
)?
;
showRestContentSetsStatement ::=
示例
以下示例列出给定 REST 服务的所有 REST 内容集。
FROM SERVICE /myService; SHOW REST CONTENT SETS
5.8 SHOW REST AUTH APPS
SHOW REST AUTH APPS
语句列出给定或当前 REST 服务的所有可用 REST 身份验证应用程序。
语法
showRestAuthAppsStatement:
SHOW REST AUTH APPS (
(IN | FROM) SERVICE? serviceRequestPath
)?
;
showRestAuthAppsStatement ::=
示例
以下示例列出给定 REST 服务的所有 REST 身份验证应用程序。
FROM SERVICE /myService; SHOW REST AUTH APPS
5.9 SHOW CREATE REST SERVICE
SHOW CREATE REST SERVICE
语句显示给定 REST 服务的相应 DDL 语句。
语法
showCreateRestServiceStatement:
SHOW CREATE REST SERVICE serviceRequestPath?
;
showCreateRestServiceStatement ::=
示例
以下示例显示请求路径为 /myService
的 REST 服务的 DDL 语句。
CREATE REST SERVICE /myService; SHOW
5.10 SHOW CREATE REST SCHEMA
SHOW CREATE REST SCHEMA
语句显示给定 REST 架构的相应 DDL 语句。
语法
showCreateRestSchemaStatement:
SHOW CREATE REST DATABASE schemaRequestPath? (
(ON | FROM) SERVICE? serviceRequestPath
)?
;
showCreateRestSchemaStatement ::=
示例
以下示例显示给定 REST 架构的 DDL 语句。
CREATE REST SCHEMA /sakila FROM /myService; SHOW
5.11 SHOW CREATE REST DUALITY VIEW
SHOW CREATE REST DUALITY VIEW
语句显示给定 REST 对偶视图的相应 DDL 语句。
语法
showCreateRestViewStatement:
SHOW CREATE REST JSON? RELATIONAL? DUALITY?
VIEW viewRequestPath (
(ON | FROM) serviceSchemaSelector
)?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
showCreateRestViewStatement ::=
serviceSchemaSelector ::=
示例
以下示例显示给定 REST 对偶视图的 DDL 语句。
CREATE REST DUALITY VIEW /city ON SERVICE /myService SCHEMA /sakila; SHOW
5.12 SHOW CREATE REST PROCEDURE
SHOW CREATE REST PROCEDURE
语句显示给定 REST 过程的相应 DDL 语句。
语法
showCreateRestProcedureStatement:
SHOW CREATE REST PROCEDURE procedureRequestPath (
(ON | FROM) serviceSchemaSelector
)?
;
serviceSchemaSelector:
(SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;
showCreateRestProcedureStatement ::=
serviceSchemaSelector ::=
示例
以下示例显示给定 REST 过程的 DDL 语句。
CREATE REST PROCEDURE /inventory_in_stock ON SERVICE /myService SCHEMA /sakila; SHOW
5.13 SHOW CREATE AUTH APP
SHOW CREATE AUTH APP
语句显示给定 REST 身份验证应用程序的相应 DDL 语句。
语法
showCreateRestAuthAppStatement:
SHOW CREATE REST AUTH APP authAppName (
(ON | FROM) SERVICE? serviceRequestPath
)?
;
showCreateRestAuthAppStatement ::=
示例
以下示例显示给定 REST 身份验证应用程序的 DDL 语句。
CREATE REST AUTH APP "MRS" FROM SERVICE localhost/myTestService; SHOW
版权所有 (c) 2023,Oracle 及其附属公司。