MRS SQL 参考

本文档讨论了 MySQL REST 服务 (MRS) DDL - SQL 扩展。MRS DDL - SQL 扩展在 MySQL Shell SQL 处理中添加了一组 MRS 特定的 DDL 语句,以提供一个熟悉的管理界面给 MySQL 开发人员和 DBA。

章节概述


另请参阅


1 简介

提供一个对 MySQL 开发人员和 DBA 来说熟悉且能很好地融入其现有流程的管理界面一直是 MySQL REST 服务 (MRS) 的重要目标。

为此,MySQL REST 服务插件直接插入到 MySQL ShellMySQL 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 ::= configureRestMetadataStatement

restMetadataOptions ::= restMetadataOptions

示例

CONFIGURE REST METADATA;

2.1.1 启用或禁用 MySQL REST 服务

enabledDisabled 选项指定配置操作后是否应启用或禁用 MySQL REST 服务。默认设置为启用 MySQL REST 服务。

enabledDisabled:
    ENABLED
    | DISABLED
;

enabledDisabled ::= enabledDisabled

示例

以下示例配置 MySQL REST 服务并启用它,并在可能的情况下更新元数据架构。

CONFIGURE REST METADATA
    ENABLED
    UPDATE 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 ::= 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
  • 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/myContentSetindex.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 ::= 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 ::= CREATE REST SERVICE 语句

restServiceOptions ::= restServiceOptions

示例

以下示例创建一个 REST 服务 /myTestService,该服务只能从 localhost 访问。

CREATE OR REPLACE REST SERVICE /myService
    COMMENTS "A simple REST service";

以下示例创建一个 REST 服务 /myTestService,该服务只能从 localhost 访问,并且在创建后被禁用。

CREATE OR REPLACE REST SERVICE localhost/myTestService
    DISABLED
    COMMENTS "A REST service that can only be accessed on localhost";
CREATE OR REPLACE REST SERVICE localhost/myTestService
    COMMENTS "A simple REST service"
    AUTHENTICATION
        PATH "/authentication"
        REDIRECTION DEFAULT
        VALIDATION DEFAULT
        PAGE CONTENT DEFAULT
    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 ::= enabledDisabled

2.2.2 REST 服务身份验证设置

每个 REST 服务都需要允许特定的身份验证设置。

restAuthentication ::= restAuthentication

  • 身份验证路径
    • 用于此 REST 服务的身份验证处理的 HTML 路径。指定为 REST 服务路径的子路径。如果没有显式设置,则默认路径为 /authentication
    • 以下端点将可用于 <service_path>/<auth_path>
      • /login
      • /status
      • /logout
      • /completed
  • 身份验证重定向
    • 成功或失败登录后,身份验证工作流将重定向到此 URL。指定为 REST 服务路径的子路径。如果未显式设置此选项,则工作流将在 <service_path>/<auth_path>/login?onCompletionRedirect 参数未设置的情况下重定向到 <service_path>/<auth_path>/completed
  • 身份验证验证
    • 用于验证 <service_path>/<auth_path>/login?onCompletionRedirect 参数的正则表达式。如果设置,这将允许限制应用程序可以为此参数指定的可能 URL。
  • 身份验证页面内容
    • 如果设置了此选项,其内容将替换 <service_path>/<auth_path>/completed 页面的页面内容。

2.2.3 REST 服务 Json 选项

jsonOptions 允许为服务设置多个特定选项。

jsonOptions:
    OPTIONS jsonValue
;

jsonOptions ::= 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 密钥用于 defaultStaticContentdefaultRedirects,则优先执行重定向。
  • 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 ::= comments

2.3 创建 REST 架构

CREATE REST SCHEMA 语句用于创建新的 REST 架构或替换现有的 REST 架构。每个 REST 架构直接映射到数据库架构,并允许通过 REST 端点公开数据库架构对象(表、视图和存储过程)。

注意:将 REST 架构添加到 REST 服务不会自动通过 REST 公开任何数据库架构对象。需要调用相应的 CREATE REST TABLECREATE REST DUALITY VIEWCREATE 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 ::= createRestSchemaStatement

restSchemaOptions ::= restSchemaOptions

示例

以下示例在 REST 服务 /myService 上创建 REST 架构 /sakila

CREATE OR REPLACE REST SCHEMA /sakila ON SERVICE /myService
    FROM `sakila`
    COMMENTS "The sakila schema";

2.3.1 在创建时启用或禁用 REST 架构

enabledDisabled 选项指定 REST 架构在创建时应启用还是禁用。

enabledDisabled:
    ENABLED
    | DISABLED
;

enabledDisabled ::= enabledDisabled

2.3.2 要求对 REST 架构访问进行身份验证

authenticationRequired 选项指定 REST 架构及其对象是否在访问其 REST 端点之前需要身份验证。

authenticationRequired:
    AUTHENTICATION NOT? REQUIRED
;

authenticationRequired ::= authenticationRequired

2.3.3 指定默认页面计数

itemsPerPage 选项可用于指定针对此 REST 架构运行的查询返回的默认项目数量。

itemsPerPage:
    ITEMS PER PAGE itemsPerPageNumber
;

itemsPerPage ::= itemsPerPage

每个 REST 对象也可以单独指定每页的项目数量。

2.3.4 REST 架构 JSON 选项

jsonOptions 允许为服务设置多个特定选项。

jsonOptions:
    OPTIONS jsonValue
;

jsonOptions ::= jsonOptions

这些选项可以包含以下 JSON 键。

所有其他键将被忽略,可用于存储有关架构的自定义元数据。在添加自定义键时,最好包含一个唯一的 前缀,以避免它们被未来的 MRS 选项覆盖。

2.3.5 REST 架构注释

注释可以包含 REST 架构的描述。注释字符串的最大长度为 512 个字符。

comments:
    COMMENTS quotedText
;

comments ::= 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 ::= createRestViewStatement

serviceSchemaSelector ::= serviceSchemaSelector

restObjectOptions ::= 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 文档。

ts> myService.sakila.city.findFirst();
{
   "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 对象对话框中的样子。

Adding a Referenced Table

对这个新的 REST 端点运行 TypeScript SDK 查询将返回以下 JSON 文档。

ts> myService.sakila.city.findFirst();
{
    "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 ::= enabledDisabled

2.4.3 要求对 REST 二元视图进行身份验证

authenticationRequired 选项指定 REST 二元视图是否在访问其 REST 端点之前需要身份验证。

authenticationRequired:
    AUTHENTICATION NOT? REQUIRED
;

authenticationRequired ::= authenticationRequired

2.4.4 指定 REST 二元视图的页面计数

itemsPerPage 选项可用于指定针对 REST 二元视图运行的查询返回的项目数量。

itemsPerPage:
    ITEMS PER PAGE itemsPerPageNumber
;

itemsPerPage ::= itemsPerPage

每个 REST 对象也可以单独指定每页的项目数量。

2.4.5 设置 REST 二元视图的媒体类型

如果此 REST 二元视图返回特定的 MIME 类型,则可以使用 restViewMediaType 选项进行设置。如果 MRS 应该尝试根据文件内容自动检测文件类型,则可以使用 AUTODETECT 选项。

restViewMediaType:
    MEDIA TYPE (quotedText | AUTODETECT)
;

restViewMediaType ::= restViewMediaType

2.4.6 设置 REST 二元视图的结果格式

REST 二元视图可以返回以下格式之一,可以使用 restViewFormat 选项进行设置。

  • FEED:结果 JSON 对象列表
  • ITEM:单个结果项
  • MEDIA:单个 blob 项。在这种情况下,使用 restViewMediaType 选项设置相应的 MIME 类型。
restViewFormat:
    FORMAT (FEED | ITEM | MEDIA)
;

restViewFormat ::= 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))。它需要返回 truefalse

restViewAuthenticationProcedure ::= 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 ::= graphQlObj

graphQlCrudOptions ::= graphQlCrudOptions

graphQlPair ::= graphQlPair

graphQlValue ::= 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 ::= createRestProcedureStatement

serviceSchemaSelector ::= serviceSchemaSelector

restObjectOptions ::= restObjectOptions

restProcedureResult ::= 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 ::= createRestContentSetStatement

restContentSetOptions ::= 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 ::= createRestAuthAppStatement

restAuthAppOptions ::= restAuthAppOptions

allowNewUsersToRegister ::= allowNewUsersToRegister

defaultRole ::= 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 ::= 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 ::= alterRestServiceStatement

restServiceOptions ::= restServiceOptions

示例

以下示例通过设置新的注释来更改 REST 服务 /myService

ALTER REST SERVICE /myService
    COMMENTS "A simple, improved REST service";

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 ::= alterRestSchemaStatement

restSchemaOptions ::= 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 ::= alterRestViewStatement

serviceSchemaSelector ::= serviceSchemaSelector

restObjectOptions ::= 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 ::= alterRestProcedureStatement

serviceSchemaSelector ::= serviceSchemaSelector

restObjectOptions ::= restObjectOptions

4 DROP

4.1 DROP REST 服务

可以使用 DROP REST SERVICE 语句删除现有 REST 服务。

语法

dropRestServiceStatement:
    DROP REST SERVICE serviceRequestPath
;

dropRestServiceStatement ::= dropRestServiceStatement

示例

以下示例删除请求路径为 /myService 的 REST 服务。

DROP REST SERVICE /myService;

4.2 DROP REST 架构

可以使用 DROP REST SCHEMA 语句删除现有 REST 架构。

语法

dropRestSchemaStatement:
    DROP REST DATABASE schemaRequestPath (
        FROM SERVICE? serviceRequestPath
    )?
;

dropRestSchemaStatement ::= 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 ::= 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 ::= dropRestProcedureStatement

4.5 DROP REST 内容集

DROP REST CONTENT SET 语句用于删除现有的 REST 静态内容集。

语法

dropRestContentSetStatement:
    DROP REST CONTENT SET contentSetRequestPath (
        FROM SERVICE? serviceRequestPath
    )?
;

dropRestContentSetStatement ::= dropRestContentSetStatement

4.6 DROP REST 身份验证应用程序

DROP REST AUTH APP 语句用于从 REST 服务中删除现有的 REST 身份验证应用程序。

语法

dropRestAuthAppStatement:
    DROP REST (AUTH | AUTHENTICATION) APP authAppName (
        FROM SERVICE? serviceRequestPath
    )?
;

dropRestAuthAppStatement ::= dropRestAuthAppStatement

4.7 DROP REST 用户

DROP REST USER 语句用于从 REST 身份验证应用程序中删除现有的 REST 用户。

语法

dropRestUserStatement:
    DROP REST USER userName AT_SIGN authAppName (
        ON SERVICE? serviceRequestPath
    )?
;

dropRestUserStatement ::= dropRestUserStatement

5 USE 和 SHOW

5.1 USE

可以使用 DROP REST SERVICE 语句删除现有 REST 服务。

语法

useStatement:
    USE REST serviceAndSchemaRequestPaths
;

serviceAndSchemaRequestPaths:
    SERVICE serviceRequestPath
    | serviceSchemaSelector
;

useStatement ::= useStatement

serviceAndSchemaRequestPaths ::= 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 ::= showRestMetadataStatusStatement

示例

以下示例删除请求路径为 /myService 的 REST 架构。

SHOW REST STATUS;

5.3 SHOW REST SERVICES

SHOW REST SERVICES 语句列出所有可用的 REST 服务。

语法

showRestServicesStatement:
    SHOW REST SERVICES
;

showRestServicesStatement ::= showRestServicesStatement

示例

以下示例列出所有 REST 服务。

SHOW REST SERVICES;

5.4 SHOW REST SCHEMAS

SHOW REST SCHEMAS 语句列出给定或当前 REST 服务的所有可用 REST 架构。

语法

showRestSchemasStatement:
    SHOW REST DATABASES (
        (IN | FROM) SERVICE? serviceRequestPath
    )?
;

showRestSchemasStatement ::= showRestSchemasStatement

示例

以下示例列出请求路径为 /myService 的 REST 服务的所有 REST 架构。

SHOW REST SERVICES FROM /myService;

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 ::= showRestViewsStatement

serviceSchemaSelector ::= serviceSchemaSelector

示例

以下示例列出给定 REST 架构的所有 REST 对偶视图。

SHOW REST DUALITY VIEWS FROM SERVICE /myService SCHEMA /sakila;

5.6 SHOW REST PROCEDURES

SHOW REST PROCEDURES 语句列出给定或当前 REST 架构的所有可用 REST 过程。

语法

showRestProceduresStatement:
    SHOW REST PROCEDURES (
        (IN | FROM) serviceSchemaSelector
    )?
;

serviceSchemaSelector:
    (SERVICE serviceRequestPath)? DATABASE schemaRequestPath
;

showRestProceduresStatement ::= showRestProceduresStatement

serviceSchemaSelector ::= serviceSchemaSelector

示例

以下示例列出给定 REST 架构的所有 REST 过程。

SHOW REST PROCEDURES FROM SERVICE /myService SCHEMA /sakila;

5.7 SHOW REST CONTENT SETS

SHOW REST CONTENT SETS 语句列出给定或当前 REST 服务的所有可用 REST 内容集。

语法

showRestContentSetsStatement:
    SHOW REST CONTENT SETS (
        (IN | FROM) SERVICE? serviceRequestPath
    )?
;

showRestContentSetsStatement ::= showRestContentSetsStatement

示例

以下示例列出给定 REST 服务的所有 REST 内容集。

SHOW REST CONTENT SETS FROM SERVICE /myService;

5.8 SHOW REST AUTH APPS

SHOW REST AUTH APPS 语句列出给定或当前 REST 服务的所有可用 REST 身份验证应用程序。

语法

showRestAuthAppsStatement:
    SHOW REST AUTH APPS (
        (IN | FROM) SERVICE? serviceRequestPath
    )?
;

showRestAuthAppsStatement ::= showRestAuthAppsStatement

示例

以下示例列出给定 REST 服务的所有 REST 身份验证应用程序。

SHOW REST AUTH APPS FROM SERVICE /myService;

5.9 SHOW CREATE REST SERVICE

SHOW CREATE REST SERVICE 语句显示给定 REST 服务的相应 DDL 语句。

语法

showCreateRestServiceStatement:
    SHOW CREATE REST SERVICE serviceRequestPath?
;

showCreateRestServiceStatement ::= showCreateRestServiceStatement

示例

以下示例显示请求路径为 /myService 的 REST 服务的 DDL 语句。

SHOW CREATE REST SERVICE /myService;

5.10 SHOW CREATE REST SCHEMA

SHOW CREATE REST SCHEMA 语句显示给定 REST 架构的相应 DDL 语句。

语法

showCreateRestSchemaStatement:
    SHOW CREATE REST DATABASE schemaRequestPath? (
        (ON | FROM) SERVICE? serviceRequestPath
    )?
;

showCreateRestSchemaStatement ::= showCreateRestSchemaStatement

示例

以下示例显示给定 REST 架构的 DDL 语句。

SHOW CREATE REST SCHEMA /sakila FROM /myService;

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 ::= showCreateRestViewStatement

serviceSchemaSelector ::= serviceSchemaSelector

示例

以下示例显示给定 REST 对偶视图的 DDL 语句。

SHOW CREATE REST DUALITY VIEW /city ON SERVICE /myService SCHEMA /sakila;

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 ::= showCreateRestProcedureStatement

serviceSchemaSelector ::= serviceSchemaSelector

示例

以下示例显示给定 REST 过程的 DDL 语句。

SHOW CREATE REST PROCEDURE /inventory_in_stock ON SERVICE /myService SCHEMA /sakila;

5.13 SHOW CREATE AUTH APP

SHOW CREATE AUTH APP 语句显示给定 REST 身份验证应用程序的相应 DDL 语句。

语法

showCreateRestAuthAppStatement:
    SHOW CREATE REST AUTH APP authAppName (
        (ON | FROM) SERVICE? serviceRequestPath
    )?
;

showCreateRestAuthAppStatement ::= showCreateRestAuthAppStatement

示例

以下示例显示给定 REST 身份验证应用程序的 DDL 语句。

SHOW CREATE REST AUTH APP "MRS" FROM SERVICE localhost/myTestService;

版权所有 (c) 2023,Oracle 及其附属公司。