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 REST 服務 (MRS) 提供 MySQL 開發人員和 DBA 感到熟悉的管理介面,並能順利整合到他們現有的流程中,一直是重要的目標。
為此,MySQL REST 服務外掛程式會直接插入 MySQL Shell 和 MySQL Shell for VS Code。它擴充了可用的 SQL 命令,納入了 DDL (資料定義語言) 陳述式,以便能以輕鬆無縫的方式管理 MySQL REST 服務。
這使得為您的應用程式建立 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
}
} };
注意:請務必先安裝 MySQL sakila 範例資料庫綱要,再執行上述 MRS DDL 指令碼。
2 設定與建立
2.1 設定 REST 中繼資料
CONFIGURE REST METADATA 陳述式用於在 MySQL Server 執行個體或 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 服務的內容。包含值/myService/myContentSet/index.html
的 JSON 金鑰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 服務。
MySQL REST 服務支援建立許多個別的 REST 服務。為每個 REST 應用程式建立個別的 REST 服務是一種良好的做法。
每個 REST 服務都可以有自己的選項、驗證應用程式,並且支援不同的驗證使用者集。
語法
createRestServiceStatement:
CREATE (OR REPLACE)? REST SERVICE serviceRequestPath
restServiceOptions?
;
restServiceOptions: (
enabledDisabled
| restAuthentication
| jsonOptions
| comments
)+
;
createRestServiceStatement ::=
restServiceOptions ::=
範例
以下範例會建立一個只能從本機主機存取的 REST 服務 /myTestService
。
CREATE OR REPLACE REST SERVICE /myService
"A simple REST service"; COMMENTS
以下範例會建立一個只能在本機主機上存取,且在建立後會停用的 REST 服務 /myTestService
。
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 Router 會傳回提出要求的特定用戶端的來源。
logging
exceptions
- 是否應記錄例外狀況。requests
body
- 是否應記錄要求主體的內容。headers
- 是否應記錄要求標頭的內容。
response
body
- 是否應記錄回應主體的內容。headers
- 是否應記錄回應標頭的內容。
returnInternalErrorDetails
- 是否應傳回內部錯誤。這對應用程式開發很有用,但應針對生產部署關閉。includeLinksInResults
- 如果設定為 false,結果將不包含導覽連結。defaultStaticContent
- 允許為 REST 服務的request path
定義靜態內容,此靜態內容將會針對符合給定 JSON 索引鍵的檔案路徑傳回。如果 REST 服務的request path
已設定為/myService
,則 MySQL Router 將會將 JSON 索引鍵index.html
作為/myService/index.html
提供。檔案內容需要以 Base64 編碼。如果defaultStaticContent
和defaultRedirects
使用相同的 JSON 索引鍵,則重新導向會優先處理。defaultRedirects
- 用於定義 MySQL Router 執行的內部重新導向。這可以用於公開 REST 服務request path
上的內容。如果 REST 服務的request path
已設定為/myService
,則包含值/myService/myContentSet/index.html
的 JSON 索引鍵index.html
將會從給定路徑公開對應的檔案作為/myService/index.html
。directoryIndexDirective
- 保存當要求目錄路徑時應傳回的檔案有序清單。將傳回第一個可用的相符檔案。directoryIndexDirective
會以遞迴方式套用至 MySQL Router 公開的所有目錄路徑。若要變更給定 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 CREATE REST SCHEMA
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 CREATE REST DUALITY VIEW
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
} };
這是 MySQL Shell for VS Code 擴充功能中的互動式 MySQL REST 物件對話方塊中 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 二元性檢視。以下規則適用
- 限制必須在資料庫中宣告。
- 關係類型可以是一對一、一對多和多對多 (使用具有兩個 FK 的對應資料表)。多對多關係可以視為一對多和一對一關係的組合
- 具有一對一或多對一關係的兩個或多個資料表的資料行可以透過 UNNEST 合併到同一個 JSON 物件中。否則會建立巢狀 JSON 物件。
- 具有一對多關係的資料表會建立巢狀 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 CREATE REST PROCEDURE
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 CREATE REST CONTENT SET
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 CREATE REST AUTH APP
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 CREATE REST USER
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 SERVICE
可以使用 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 SCHEMA
可以使用 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 DUALITY VIEW
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 PROCEDURE
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 SERVICE
可以使用 DROP REST SERVICE
陳述式來刪除現有的 REST 服務。
語法
dropRestServiceStatement:
DROP REST SERVICE serviceRequestPath
;
dropRestServiceStatement ::=
範例
以下範例會刪除請求路徑為 /myService
的 REST 服務。
DROP REST SERVICE /myService;
4.2 DROP REST SCHEMA
可以使用 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 DUALITY VIEW
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 PROCEDURE
DROP REST PROCEDURE
陳述式用於刪除現有的 REST 程序。
語法
dropRestProcedureStatement:
DROP REST PROCEDURE procedureRequestPath (
FROM serviceSchemaSelector
)?
;
dropRestProcedureStatement ::=
4.5 DROP REST CONTENT SET
DROP REST CONTENT SET
陳述式用於刪除現有的 REST 靜態內容集。
語法
dropRestContentSetStatement:
DROP REST CONTENT SET contentSetRequestPath (
FROM SERVICE? serviceRequestPath
)?
;
dropRestContentSetStatement ::=
4.6 DROP REST AUTH APP
DROP REST AUTH APP
陳述式用於從 REST 服務中刪除現有的 REST 驗證應用程式。
語法
dropRestAuthAppStatement:
DROP REST (AUTH | AUTHENTICATION) APP authAppName (
FROM SERVICE? serviceRequestPath
)?
;
dropRestAuthAppStatement ::=
4.7 DROP REST USER
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
Copyright (c) 2023, Oracle 和/或其附屬公司。