MRS SQL 參考

本文檔討論 MySQL REST 服務 (MRS) DDL - SQL 擴充功能。MRS DDL - SQL 擴充功能為 MySQL Shell SQL 處理新增了一組 MRS 特定的 DDL 陳述式,以便為 MySQL 開發人員和 DBA 提供熟悉的管理介面。

章節概述


另請參閱


1 簡介

為 MySQL REST 服務 (MRS) 提供 MySQL 開發人員和 DBA 感到熟悉的管理介面,並能順利整合到他們現有的流程中,一直是重要的目標。

為此,MySQL REST 服務外掛程式會直接插入 MySQL ShellMySQL 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 ::= 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 金鑰同時用於 defaultStaticContentdefaultRedirects,則會優先處理重新導向。
  • defaultRedirects
    • 用於定義由 MySQL 路由器執行的內部重新導向。這可用於在根路徑 / 上公開 REST 服務的內容。包含值 /myService/myContentSet/index.html 的 JSON 金鑰 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 服務。

MySQL REST 服務支援建立許多個別的 REST 服務。為每個 REST 應用程式建立個別的 REST 服務是一種良好的做法。

每個 REST 服務都可以有自己的選項、驗證應用程式,並且支援不同的驗證使用者集。

語法

createRestServiceStatement:
    CREATE (OR REPLACE)? REST SERVICE serviceRequestPath
        restServiceOptions?
;

restServiceOptions: (
        enabledDisabled
        | restAuthentication
        | jsonOptions
        | comments
    )+
;

createRestServiceStatement ::= CREATE REST SERVICE Statement

restServiceOptions ::= restServiceOptions

範例

以下範例會建立一個只能從本機主機存取的 REST 服務 /myTestService

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

以下範例會建立一個只能在本機主機上存取,且在建立後會停用的 REST 服務 /myTestService

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 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 編碼。如果 defaultStaticContentdefaultRedirects 使用相同的 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 ::= comments

2.3 CREATE REST SCHEMA

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 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 ::= 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
    }
};

這是 MySQL Shell for VS Code 擴充功能中的互動式 MySQL REST 物件對話方塊中 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 二元性檢視。以下規則適用

  • 限制必須在資料庫中宣告。
  • 關係類型可以是一對一、一對多和多對多 (使用具有兩個 FK 的對應資料表)。多對多關係可以視為一對多和一對一關係的組合
  • 具有一對一或多對一關係的兩個或多個資料表的資料行可以透過 UNNEST 合併到同一個 JSON 物件中。否則會建立巢狀 JSON 物件。
  • 具有一對多關係的資料表會建立巢狀 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 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 ::= createRestProcedureStatement

serviceSchemaSelector ::= serviceSchemaSelector

restObjectOptions ::= restObjectOptions

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

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

restAuthAppOptions ::= restAuthAppOptions

allowNewUsersToRegister ::= allowNewUsersToRegister

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

restServiceOptions ::= restServiceOptions

範例

以下範例會透過設定新的註解來變更 REST 服務 /myService

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

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

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

serviceSchemaSelector ::= serviceSchemaSelector

restObjectOptions ::= restObjectOptions

4 DROP

4.1 DROP REST SERVICE

可以使用 DROP REST SERVICE 陳述式來刪除現有的 REST 服務。

語法

dropRestServiceStatement:
    DROP REST SERVICE serviceRequestPath
;

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

4.5 DROP REST CONTENT SET

DROP REST CONTENT SET 陳述式用於刪除現有的 REST 靜態內容集。

語法

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

dropRestContentSetStatement ::= dropRestContentSetStatement

4.6 DROP REST AUTH APP

DROP REST AUTH APP 陳述式用於從 REST 服務中刪除現有的 REST 驗證應用程式。

語法

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

dropRestAuthAppStatement ::= dropRestAuthAppStatement

4.7 DROP REST USER

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;

Copyright (c) 2023, Oracle 和/或其附屬公司。