MRS 開發人員指南

本書說明如何安裝和設定 MySQL REST 服務 (MRS),以及如何透過 REST 呼叫存取資料。

章節概述


另請參閱


1 MySQL REST 服務簡介

歡迎使用 MySQL REST 服務 (MRS)。它提供快速且強大的方式,透過 HTTPS REST 介面將資料提供給用戶端應用程式。

若要開始實際操作,請參閱MRS 筆記範例,並依照其中的建置和部署說明操作。

本節提供 MySQL REST 服務及其功能的概述。

關於 MySQL REST 服務

MySQL REST 服務 (MRS) 提供對選定 MySQL Schema 物件的 HTTPS REST 存取。它的模型參照並支援 Oracle REST 資料服務 (ORDS) 的子集。

如需詳細資訊,請參閱 ORDS

MRS 由下列元件組成

  • MySQL 解決方案 (例如 MySQL Heatwave、MySQL InnoDB Cluster、獨立 MySQL 伺服器等)
    • 服務一個保存 MRS 設定的 metadata schema mysql_rest_service_metadata
    • 服務應用程式的資料
  • MySQL Router
    • 一個或多個 MySQL Router 執行個體,在預設連接埠 8443 上服務 HTTPS REST 介面
  • MySQL Shell / 適用於 VS Code 的 MySQL Shell
    • 支援透過嵌入在 VS Code 內的圖形使用者介面 (GUI) 管理 MRS
    • MRS 外掛程式可在終端機上設定和管理 MRS 設定,並使用指令碼

關於 REST API

表述性狀態傳輸 (REST) 是一種用於分散式超媒體系統 (例如全球資訊網) 的軟體架構樣式。當 API 符合 REST 的原則時,會將其描述為 RESTful。雖然對 REST 的完整討論超出本文檔的範圍,但 REST API 具有以下特性

  • 資料會建模為一組資源。資源由 URI 識別。
  • 使用一組小型、統一的操作來操作資源 (例如,PUT、POST、GET、DELETE)。
  • 資源可以有多種表示形式 (例如,部落格可能具有 HTML 表示形式和 RSS 表示形式)。
  • 服務是無狀態的,並且由於用戶端很可能存取相關資源,因此應在傳回的表示形式中識別這些資源,通常是透過提供超文字連結來識別。

功能概述

功能 說明
MRS AutoREST 啟用對表格、檢視或程序的 REST 存取,即可透過 RESTful 服務存取它。AutoREST 是一種快速且簡單的方式,可將資料庫表格公開為 REST 資源。
JSON-關聯二元性檢視 二元性檢視結合關聯式 Schema 的優點與文件資料庫的易用性。它們使您的資料具有概念和操作二元性,因為它在關聯式和階層式方面都進行了組織。
服務靜態內容 除了使用 AutoREST 服務動態內容之外,還可以上傳靜態內容,例如 HTML、CSS 和影像檔案。此功能並非旨在取代支援伺服器端程式設計等功能的專用 HTTP 伺服器。它可以幫助快速部署原型和概念證明工作,以幫助將想法付諸實踐。
終端使用者驗證 MRS 支援多種驗證方法,包括 MRS REST 服務特定驗證、原生 MySQL 驗證和 OAuth2 驗證 (使用 Facebook 和 Google 登入)
終端使用者授權 內建支援列層級安全性、基於角色的安全性、基於使用者階層的安全性、基於群組的安全性、基於群組階層的安全性以及自訂授權支援
REST 服務 SDK API 產生 針對使用 TypeScript 的互動式原型設計的即時 SDK API 更新、針對應用程式開發的 SDK API 產生

2 部署架構

MySQL REST 服務 (MRS) 可以根據個別專案需求,以多種不同方式部署。

開發部署

最小的可能開發環境包含單一 MySQL 伺服器執行個體和在同一台電腦上執行的 MySQL Router 執行個體。

建議的開發部署包含 InnoDB Cluster,其中至少部署三個 MySQL 伺服器執行個體和兩個 MySQL Router 執行個體。

對於雲端開發,應使用啟用高可用性功能的 MySQL 資料庫服務執行個體,以及兩個具有 MySQL Router 部署的運算執行個體。

生產部署

在生產環境中,應使用設定有三個或更多 MySQL Router 執行個體的 InnoDB Cluster。建議使用負載平衡器,將 MySQL Router 執行個體的 HTTPS 連接埠公開給公用網際網路。

對於生產中的雲端開發,應使用啟用高可用性功能的 MySQL 資料庫服務執行個體,以及三個或更多具有 MySQL Router 部署的運算執行個體。建議使用負載平衡器,將 MySQL Router 的 HTTPS 連接埠公開給公用網際網路。

MySQL REST Service Architecture Diagram

3 設定 MySQL REST 服務

若要設定 MySQL REST 服務 (MRS),請使用下列步驟

  1. 部署 MySQL 解決方案。
  2. 設定 MRS metadata 資料庫 Schema。
  3. 啟動並執行一個或多個 MySQL Router 執行個體以支援 MRS。

執行這些步驟後,MySQL REST 服務即完全設定完成。

然後,可以存取在 MySQL Router 啟動過程中設定的 HTTP/S 端點。

MySQL 解決方案的部署

支援下列 MySQL 解決方案

  • MySQL HeatWave
  • MySQL InnoDB Cluster
  • MySQL InnoDB ClusterSet
  • MySQL InnoDB ReplicaSet
  • MySQL Operator

為了開發目的,也支援獨立 MySQL 伺服器執行個體。避免在生產部署中使用獨立設定,因為它不提供任何形式的高可用性 (HA)。

  • 獨立 MySQL 伺服器

請參閱關於如何部署和設定不同 MySQL 解決方案的相關文件。

3.1 設定 MRS Metadata Schema

MySQL REST 服務將其設定儲存在 mysql_rest_service_metadata 資料庫 Schema 中。若要部署 metadata schema,請執行本節中描述的其中一項工作。

注意:用於連線到 MySQL 解決方案的 MySQL 使用者必須具有建立資料庫 Schema 和角色的 MySQL 權限。

3.1.1 使用適用於 VS Code 的 MySQL Shell 進行 MRS 設定

  1. 啟動 VS Code,安裝適用於 VS Code 的 MySQL Shell 延伸模組,然後新增資料庫連線到 MySQL 設定。

  2. 在「資料庫連線」檢視中,按一下滑鼠右鍵,然後選取「為 MySQL REST 服務支援設定執行個體」。

Configure Instance for MySQL REST Service Support

現在已設定 MRS metadata schema。

3.1.2 使用 MySQL Shell 進行 MRS 設定

開啟終端機,啟動 MySQL Shell,然後連線到 MySQL 設定。

mysqlsh dba@localhost

使用 MRS 外掛程式執行 mrs.configure() 來設定 metadata schema。

MySQL> localhost:33060+> JS> mrs.configure()
MySQL Rest Data Service configuration.

Checking MRS metadata schema and version...
Creating MRS metadata schema...
The MRS metadata is well configured, no changes performed.

現在已設定 MRS metadata schema。

3.2 使用 MRS 支援啟動並執行 MySQL Router

MySQL Router 是任何 MySQL 解決方案的重要組成部分,因此通常與 MySQL 伺服器執行個體在同一個步驟中部署。如需詳細資訊,請參閱 MySQL Router 文件。

需要設定 MySQL Router 執行個體以支援 MRS。這通常是透過使用 mysqlrouter_bootstrap 命令來完成的,該命令會查詢使用者帳戶以取得必要資訊。

3.2.1 使用適用於 VS Code 的 MySQL Shell 來啟動並執行 MySQL Router

在處理本機開發設定時,通常會在本機開發電腦上安裝 MySQL Router 執行個體。

在這個情況下,可以使用適用於 VS Code 的 MySQL Shell 來簡化引導程序,並按如下方式啟動 MySQL Router 執行個體

  1. 在您的本機開發機器上下載並安裝 MySQL Router 套件
    • 如果未使用 macOS 上的 DMG 或 Windows 上的 MSI 套件來安裝 MySQL Router,請確保包含 MySQL Router 二進位檔的目錄位於系統 PATH 中。
  2. 在適用於 VS Code 的 MySQL Shell 內,展開「資料庫連線」檢視中的資料庫連線,在 MySQL REST Service 樹狀項目上按一下滑鼠右鍵,然後選取 Start Local MySQL Router Instance
    • 如果尚未設定 MySQL Router,引導作業會在整合的 VS Code 終端機中執行,然後啟動 MySQL Router。
    • 然後可以在 VS Code 終端機中檢查 MySQL Router 的偵錯輸出。
  3. 若要關閉 MySQL Router,請將焦點設定為顯示偵錯輸出的 VS Code 終端機,然後按 Ctrl + C

注意:先前的任務僅適用於未使用 MySQL SSH 通道或 MDS 通道功能的傳統 MySQL 連線。

Bootstrap and Start MySQL Router

在 MySQL Router 引導並啟動後,MRS 可在 https://127.0.0.1:8443/<service-name> 上使用。

然後您可以繼續並新增 REST 服務

3.2.2 從命令列引導 MySQL Router

在部署新的 MySQL Router 執行個體時,建議使用 mysqlrouter_bootstrap 命令來引導和設定路由器,包括 MRS 設定。這對於重新設定現有 MySQL Router 執行個體的 MRS 支援也適用。

mysqlrouter_bootstrap dba@127.0.0.1:3306 --mrs --directory ~/.mysqlrouter

請按照命令列上的互動式步驟來設定路由器。

手動建立用於 MySQL Router 存取的 MySQL 使用者帳戶

當使用 mysqlrouter_bootstrap 命令設定 MRS 的 MySQL Router 時,可以自動建立本節中描述的使用者帳戶。

如果您想要手動管理所需的 MySQL 帳戶,則需要執行下列步驟

  1. 建立 MySQL 使用者帳戶(或多個帳戶)
    • 如果僅指定一個帳戶,MySQL Router 會使用它來存取 MRS 中繼資料結構描述和應用程式結構描述資料。此帳戶必須具有 mysql_rest_service_meta_providermysql_rest_service_data_provider 角色。
    • 如果使用兩個帳戶,MySQL Router 會使用一個帳戶來存取 MRS 中繼資料結構描述,另一個帳戶來存取應用程式結構描述資料。將 mysql_rest_service_meta_provider 角色指派給一個使用者,並將 mysql_rest_service_data_provider 指派給另一個使用者。
  2. 使用建立的 MySQL 帳戶以及下列選項來引導 MySQL Routers 執行個體
    • --mrs-mysql-metadata-account 路由器用來存取 MRS 中繼資料結構描述
    • --mrs-mysql-data-account 路由器用來存取應用程式結構描述

作為 MRS 中繼資料結構描述建立的一部分,已為 MySQL Router 建立兩個 SQL 角色以存取 MySQL

  • 「mysql_rest_service_meta_provider」角色會授與對所需 MRS 中繼資料結構描述表格的存取權。
  • 「mysql_rest_service_data_provider」角色會授與對應用程式資料庫結構描述中服務結構描述物件的存取權。

若要建立 MySQL 帳戶,請使用 MySQL Shell 或適用於 VS Code 的 MySQL Shell 連線至 MySQL 設定,並執行下列 SQL 陳述式

CREATE USER 'mysqlrouter_mrs_<router_name>'@'<router_host>' IDENTIFIED BY 'password';
GRANT 'mysql_rest_service_meta_provider', 'mysql_rest_service_data_provider' TO 'mysqlrouter_mrs_<router_name>'@'<router_host>';

然後可以在呼叫 mysqlrouter_bootstrap 命令時使用為帳戶指定的用戶名稱。

選項 說明
--mrs-mysql-metadata-account=USER_NAME 設定 MRS 中繼資料使用者
--mrs-mysql-data-account=USER_NAME 設定 MRS 資料使用者

將 MRS 設定新增至現有的 MySQL Router 設定

如果您的 MySQL Router 執行個體已設定完成,可以稍後再新增 MRS 設定。

若要取得現有設定檔的路徑,請執行 mysqlrouter --help 以顯示路由器設定檔的確切位置。

以下是連線至單一開發伺服器的範例。

[DEFAULT]
logging_folder = /var/log/mysqlrouter
runtime_folder = /var/run/mysqlrouter
config_folder = /etc/mysqlrouter

[logger]
level = DEBUG

[routing:mrs_rw]
bind_address=0.0.0.0
bind_port=6446
destinations=10.0.1.135:3306
routing_strategy=round-robin
protocol=classic

若要在路由器上啟用 MRS 支援,則需要使用 [http_server] 區段和 [rest_mrs] 區段來延伸設定檔。

建議使用 mysqlrouter_bootstrap 命令來設定 MRS 的路由器。

mysqlrouter_bootstrap dba@127.0.0.1:13000 --mrs --directory /export/mysql/src/mysql-trunk/boot

這些參數可以用來設定 MRS 設定選項。

選項 說明
--mrs 包括 MRS 設定
--mrs-mysql-metadata-account=USER_NAME 設定 MRS 中繼資料使用者
--mrs-mysql-data-account=USER_NAME 設定 MRS 資料使用者
--mrs-global-secret=SECRET 每個 MySQL Router 安裝必須相同的全域 JWT 秘密

下列範例示範連線至單一開發伺服器,並使用 HTTP 提供 REST 服務。

[http_server]
port=8443
ssl=1
ssl_cert=/Users/myUser/.mysqlsh/plugin_data/gui_plugin/web_certs/server.crt
ssl_key=/Users/myUser/.mysqlsh/plugin_data/gui_plugin/web_certs/server.key

[mysql_rest_service]
mysql_read_only_route=bootstrap_ro
mysql_read_write_route=bootstrap_rw
mysql_user=mysql_router_mrs16_250ho3u15n
mysql_user_data_access=
router_id=16

4 新增 REST 服務和資料庫物件

MRS 支援設定大量個別 REST 服務。

每個 REST 服務都有自己的 URL 路徑、主機名稱、支援的協定、驗證選項和其他設定。服務可以公開選定的資料庫結構描述和物件清單。

可以為每個應用程式執行個別設定,建議為每個應用程式設定單獨的 REST 服務。

新增 REST 服務的先決條件

在設定新的 REST 服務之前,請確保符合下列先決條件

  • 必須在目標 MySQL 解決方案上設定 MySQL REST Service。請參閱本手冊的設定章節。
  • 用來連線至目標 MySQL 解決方案的 MySQL 帳戶需要被授與 mysql_rest_service_admin MySQL 角色或權限的超集。

若要授與 mysql_rest_service_admin MySQL 角色,請執行下列 SQL 陳述式。

GRANT 'mysql_rest_service_admin' TO 'user_account'@'%';

-- Please ensure to include all roles in the next statement
-- that should become active when the user connects
ALTER USER 'user_account'@'%' DEFAULT ROLE 'mysql_rest_service_admin';

4.1 設定新的 REST 服務

可以使用下列其中一種方式新增新的 REST 服務

  • 適用於 VS Code 的 MySQL Shell 提供 GUI 對話方塊來建立 REST 服務。
  • MySQL Shell 提供 MRS 外掛程式,可以用來在終端機中以互動方式或使用指令碼來建立 REST 服務。
  • 當為 MySQL Shell 撰寫指令碼或外掛程式時,可以使用 MRS 外掛程式來編寫 Python 或 JavaScript 中的建立指令碼。

4.1.1 使用適用於 VS Code 的 MySQL Shell 新增 REST 服務

在目標 MySQL 執行個體上設定 MySQL REST Service 後,「資料庫連線」檢視中的資料庫連線(展開時)會顯示新的樹狀項目 MySQL REST Service

  1. 在樹狀項目 MySQL REST Service 上按一下滑鼠右鍵,然後從清單中選取 Add REST Service... 以顯示 MySQL REST Service 對話方塊。

  2. 指定必要參數的值,然後按一下 OK 以新增新的 REST 服務。

Adding a REST Service

4.1.2 使用 MySQL Shell 新增 REST 服務

對於 MySQL Shell,mrs 外掛程式是用來處理 MySQL REST Service。mrs.add.service() 函式會新增新的 REST 服務。

當在不使用參數的情況下啟動時,互動式精靈會提示您輸入必要的參數。例如

MySQL > localhost:33060+ > Py > mrs.add.service()
Please enter the context path for this service [/mrs]: /myservice
Please enter the host name for this service (e.g. None or localhost) [None]:
   1 HTTP
   2 HTTPS

Please select the protocol(s) the service should support [HTTP,HTTPS]: 2
Comments:
   1 Default Service Options for Development
   2 No options
   3 Custom options

Please select how to initialize the options [Default Service Options for Development]:

Service /myservice created successfully.

執行下列命令以取得關於 mrs.add.service() 函式的詳細說明資訊。

\? mrs.add.service

4.1.3 REST 服務定義

4.1.3.1 關於 MRS AutoREST

AutoREST 是一種快速且簡單的方式,可將資料庫結構描述表格、檢視和程序公開為 REST 資源。

4.1.3.2 REST API

表述性狀態傳輸 (REST) 是一種用於分散式超媒體系統 (例如全球資訊網) 的軟體架構樣式。當 API 符合 REST 的原則時,會將其描述為 RESTful。雖然對 REST 的完整討論超出本文檔的範圍,但 REST API 具有以下特性

  • 資料會建模為一組資源。資源由 URI 識別。

  • 使用一組小型、統一的操作來操作資源 (例如,PUT、POST、GET、DELETE)。

  • 資源可以有多種表示形式 (例如,部落格可能具有 HTML 表示形式和 RSS 表示形式)。

  • 服務是無狀態的,而且由於用戶端可能會想要存取相關的資源,因此應在傳回的表示中識別這些資源,通常是透過提供超文字連結來識別。

4.1.3.3 RESTful 服務術語

本節介紹本文件中使用的一些常見術語

  • RESTful 服務:符合 RESTful 架構樣式宗旨的 HTTP Web 服務。

  • 資源模組:用於分組相關資源範本的組織單位。

  • 資源範本:能夠處理針對某些 URI (通用資源識別碼) 集合發出之要求的個別 RESTful 服務。URI 集合由資源範本的 URI 模式定義

  • URI 模式:資源範本的模式。可以是路由模式或 URI 範本,雖然建議您使用路由模式。

  • 路由模式:著重於將 URI 路徑部分分解成其元件部分的模式。例如,模式 /:object/:id? 將會符合 /emp/101(符合對 emp 資源中 ID 為 101 的項目發出的請求),也會符合 /emp/(符合對 emp 資源發出的請求,因為 :id 參數使用 ? 修飾詞加以註解,這表示 id 參數為選用)。

  • HTTP 作業:HTTP (超文字傳輸協定) 定義可以在資源上執行的標準方法:GET (擷取資源內容)、POST (儲存新的資源)、PUT (更新現有的資源) 和 DELETE (移除資源)。

4.2 將資料庫結構描述新增至 REST 服務

可以為每個 MySQL 資料庫結構描述建立對應的 REST 結構描述,並將其新增至 REST 服務。可以透過為 MySQL 資料庫結構描述建立數個 REST 結構描述,將相同的 MySQL 資料庫結構描述新增至不同的 REST 服務。

可以使用適用於 VS Code 的 MySQL Shell 或命令列上的 MySQL Shell 來建立 REST 結構描述。

注意:將資料庫結構描述新增為 REST 結構描述,並不等同於透過 RESTful Web 服務公開結構描述中的所有表格和檢視。這僅表示讓 MySQL REST Service 知道結構描述存在,而且它可能具有零個或多個要透過 HTTP/S 公開的資源。

新增資料庫結構描述和物件的先決條件

在新增 REST 結構描述和物件之前,請確保符合下列先決條件

  • 必須先新增 REST 服務 (請參閱新增 REST 服務)。
  • 用來連線至目標 MySQL 解決方案的 MySQL 帳戶需要被授與 mysql_rest_service_schema_admin MySQL 角色或權限的超集。

若要授與 mysql_rest_service_schema_admin MySQL 角色,請執行下列 SQL 陳述式。

GRANT 'mysql_rest_service_schema_admin' TO 'user_account'@'%';

-- Please ensure to include all roles in the next statement
-- that should become active when the user connects
ALTER USER 'user_account'@'%' DEFAULT ROLE 'mysql_rest_service_schema_admin';

4.2.1 透過 MRS DDL 新增 Schema

在有效的 MySQL Shell 連線中,執行 CREATE REST SCHEMA DDL 語句,並在 FROM 子句中參照對應的 MySQL 資料庫 schema。請參閱 MRS SQL 參考以了解更多詳細資訊。

範例

以下範例將 sakila 資料庫 schema 的 REST schema 新增至 REST 服務 /myService

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

4.2.2 使用 MySQL Shell for VS Code UI 新增 Schema

要將資料庫 schema 新增至 REST 服務

  1. 在「資料庫連線」檢視中,右鍵點擊 schema 並選擇「新增 Schema 至 REST 服務」。這將開啟一個對話方塊,您可以在其中設定所有 REST schema 參數。

  2. 點擊「確定」以新增 schema。

Adding a Database Schema

4.2.3 使用 MySQL Shell Script 新增 REST Schema

要將資料庫 schema 新增至 REST 服務,請呼叫 mrs.add.schema() 函數。

當未帶參數啟動時,互動式精靈會提示您輸入所需的參數。

 MySQL > localhost:33060+ > JS > mrs.add.schema()
   1 information_schema
   2 performance_schema
   3 sys
   4 sakila
   5 test
   6 forum
   7 ortho
   8 mrs_notes

Please enter the name or index of a schema: 4
Please enter the request path for this schema [/sakila]: /sakila
Should the schema require authentication [y/N]:
How many items should be listed per page [Schema Default]:
Comments:
Options:

Service with path /sakila created successfully.

執行以下命令以取得關於 mrs.add.schema() 函數的詳細說明資訊。

\? mrs.add.schema

4.3 新增 Schema 資料表、檢視或程序

將資料庫 schema 物件(資料表、檢視或程序)新增至 MySQL REST 服務 (MRS),使其能夠透過 RESTful Web 服務存取。在將資料庫 schema 物件新增為 REST 物件之前,必須先將包含這些物件的資料庫 schema 新增為 REST schema。

下圖顯示 REST schema 及其 REST 物件。

REST Schema and its Objects

一旦 MySQL 資料庫 schema 已新增為 REST schema,就可以新增其物件。資料庫 schema 資料表和檢視會新增為 REST 對偶性檢視,而預存程序會新增為 REST 程序。

注意:REST 對偶性檢視使應用程式開發人員能夠在實作應用程式時採取以文件為中心的方法。請參閱此文件的 JSON 對偶性檢視 章節,以了解使用 REST 對偶性檢視的優勢。

可以使用 MySQL Shell for VS Code 或命令列上的 MySQL Shell 新增 MySQL 資料庫 schema 物件。

4.3.1 透過 MRS DDL 新增 Schema 物件

在有效的 MySQL Shell 連線中,執行 CREATE REST DUALITY VIEW DDL 語句,以將資料庫 schema 資料表或檢視新增為 REST 物件。請參閱 MRS SQL 參考 以了解更多詳細資訊。

要新增預存程序,可以使用 CREATE REST PROCEDURE DDL 語句。

範例

以下範例將 sakila.city 資料庫 schema 資料表的 REST 對偶性檢視新增至 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
};

下一個範例將 sakila.film_in_stock 資料庫 schema 預存程序的 REST 程序新增至 REST 服務。

CREATE OR REPLACE REST PROCEDURE /filmInStock
FROM `sakila`.`film_in_stock` AS MyServiceSakilaFilmInStock
PARAMETERS {
    pFilmId: p_film_id @IN,
    pStoreId: p_store_id @IN,
    pFilmCount: p_film_count @OUT
}
RESULT MyServiceSakilaFilmInStock {
    inventoryId: inventory_id @DATATYPE("int")
};

4.3.2 使用 MySQL Shell for VS Code UI 新增 Schema 物件

要將資料庫 schema 物件新增至 REST schema

  1. 在「資料庫連線」檢視中,右鍵點擊資料庫物件,然後選擇「新增資料庫物件至 REST 服務」。這將開啟 MySQL REST 物件對話方塊

  2. 相應地調整所有 REST 物件設定。

  3. 按下「確定」以新增資料庫 schema 物件。

Adding a Database Object

4.3.3 使用 MySQL Shell 新增資料庫物件

要將資料庫 schema 新增至 REST 服務,請呼叫 mrs.add.dbObject() 函數。

當未帶參數啟動時,互動式精靈會提示您輸入所需的參數。

MySQL > localhost:33060+ > JS > mrs.add.dbObject()
   1 mrs_notes
   2 sakila

Please enter the name or index of a schema: 2
   1 TABLE
   2 VIEW
   3 PROCEDURE

Please enter the name or index of a database object type [TABLE]:
   1 actor
   2 address
   3 category
   4 city
   5 country
   6 customer
   7 film
   8 film_actor
   9 film_category
  10 film_text
  11 inventory
  12 language
  13 payment
  14 rental
  15 staff
  16 store

Please enter the name or index of an database object: 4
Please enter the request path for this object [/city]:
   1 CREATE
   2 READ
   3 UPDATE
   4 DELETE

Please select the CRUD operations that should be supported, '*' for all [READ]:
   1 FEED
   2 ITEM
   3 MEDIA

Please select the CRUD operation format [FEED]:
Should the db_object require authentication [y/N]:
Should row ownership be required when querying the object [y/N]:
How many items should be listed per page [Schema Default]:
Comments:

Object added successfully.

執行以下命令以取得關於 mrs.add.dbObject() 函數的詳細說明資訊。

\? mrs.add.dbObject

5 以互動方式使用 REST 服務

MySQL Shell for VS Code 提供了一個即時、互動式的工作流程,用於設計 REST 服務。

它允許開發人員直接從 DB Notebook 中使用 MRS SDK TypeScript 用戶端 API 來立即測試他們新建立或修改的 REST 對偶性檢視和 REST 程序。

互動式工作流程的先決條件

5.1 切換到 TypeScript 模式

在 MySQL Shell for VS Code 中開啟資料庫連線後,將會顯示 DB Notebook。如果 DB Notebook 處於 SQL 模式,請使用 \ts 將其切換到 TypeScript 模式。

DB Notebook - Switch to TS mode

5.2 選擇 REST 服務

為了在 DB Notebook 上使用 REST 服務,需要將其設定為「目前」REST 服務。這類似於執行 SQL USE db_name 語句以設定「目前」資料庫 schema。

要取得關於目前 REST 服務的資訊,請使用全域 mrs 物件並執行 mrs.getStatus() 函數。它將列印關於 MRS 狀態的資訊。目前 REST 服務的屬性 isCurrent 設定為 true

範例

ts> mrs.getStatus();
{
    "configured": true,
    "info": "2 REST services available.",
    "services": [
        {
            "serviceName": "myService",
            "url": "https://127.0.0.1:8443/myService",
            "isCurrent": true
        },
        {
            "serviceName": "myPublicService",
            "url": "https://127.0.0.1:8443/myPublicService",
            "isCurrent": false
        }
    ]
}

一旦設定了目前的 REST 服務,該服務的 MRS TypeScript 用戶端 API 會自動即時產生,並可在 DB Notebook 上的 TypeScript 程式碼區塊中使用。

可以使用與 mrs.getStatus() 函數在 serviceName 屬性中列出的相同名稱的全域變數直接存取目前的 REST 服務物件。serviceName 直接從 REST 服務的 url context root 路徑導出,方法是將其轉換為 camel case 並移除所有斜線 /。例如,url context root/myService 的 REST 服務將可作為 myService 存取。

範例

ts> myService.url;
https://127.0.0.1:8443/myService

可以透過 DB Notebook 中的 TypeScript 或透過 VS Code UI 設定目前的 REST 服務。

5.2.1 使用 Typescript 設定目前的 REST 服務

全域 mrs 物件會自動保存所有可用 REST 服務的屬性。REST 服務屬性的命名與每個 REST 服務的 serviceName 相符,如上一節所述。

執行 mrs.<serviceName>.setAsCurrent() 函數,以將指定的 REST 服務設為目前的服務。VS Code 自動完成功能將協助選擇 serviceName

範例

ts> mrs.myPublicService.setAsCurrent();

注意:目前的 REST 服務只有在執行完整的 TypeScript 程式碼區塊(macOS 上使用 [command] + [Return],Linux 和 Windows 上使用 [Ctrl] + [Return])後才能使用。它使用無法等待的非同步訊息管線。因此,嘗試存取已變更之相同程式碼區塊中目前的 REST 服務的特定方法將無法運作。

5.2.2 使用 VS Code 設定目前的 REST 服務

瀏覽 VS Code「主要側邊欄」中的「資料庫連線」檢視,開啟目前的 DB 連線以及「MySQL REST 服務」樹狀結構項目,然後右鍵點擊所需的 MRS 服務,並從內容功能表中選擇「設定為目前的 REST 服務」。

Setting the Current REST Service

目前的 REST 服務會以實心、填滿的 REST 服務圖示表示。所有其他 REST 服務都只使用帶有輪廓的圖示。

5.3 驗證

如果某些 REST 物件需要驗證,並且已將 REST 驗證應用程式新增至 REST 服務,請使用 REST 服務用戶端 API 物件的 authenticate() 函數。這將顯示一個登入對話方塊,您可以在其中指定使用者帳戶的憑證。

ts> myService.authenticate();

authenticate() 函數僅適用於內建的 MRS 驗證供應商。請務必在新增 REST 驗證應用程式時設定此供應商。

5.4 查詢 REST 物件

在以下範例中,使用了 sakila.city 資料庫資料表,如以上螢幕擷取畫面所示。

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"
   }
}

可以篩選欄位,並新增條件 where 子句。請參閱 MRS SDK 用戶端 API 文件以了解更多資訊。

ts> myService.sakila.city.findMany({select: ["city", "cityId"], where: {city: {$like: "NE%"}}});
{
    "items": [
        {
            "city": "Newcastle",
            "links": [
                {
                    "rel": "self",
                    "href": "/myService/sakila/city/364"
                }
            ],
            "cityId": 364,
            "_metadata": {}
        },
        {
            "city": "Nezahualcyotl",
            "links": [
                {
                    "rel": "self",
                    "href": "/myService/sakila/city/365"
                }
            ],
            "cityId": 365,
            "_metadata": {
                "etag": "681C34301F6ED6FD1200505C9C2CFB90E3367A267B7AADBD85186D781FEC7C19"
            }
        }
    ],
    "limit": 25,
    "offset": 0,
    "hasMore": false,
    "count": 2,
    "links": [
        {
            "rel": "self",
            "href": "/myService/sakila/city/"
        }
    ]
}

若要使用 REST 物件對話方塊快速編輯 REST DB 物件,可以使用 edit() 函數。請注意,此函數僅適用於 DB Notebooks。

ts> myService.sakila.city.edit()

6 JSON 關聯性對偶性檢視

6.1 對偶性檢視簡介

對偶性檢視結合了關聯性 schema 的優點和文件資料庫的易用性。它們為您的資料提供概念性和操作性對偶性,因為它們既以關聯性方式又以階層方式組織。您可以根據儲存在一個或多個相同資料表中的資料建立不同的對偶性檢視,從而在相同的共用資料上提供不同的 JSON 階層。這表示應用程式可以將相同的資料作為 JSON 文件集合或一組相關的資料表和欄存取(建立、查詢、修改),並且兩種方法可以同時採用。

6.1.1 使用案例

MySQL REST 服務提供對偶性檢視的完整支援。它們用於涵蓋關聯性使用案例 (1) 和以文件為中心的使用案例 (2)。

  1. 透過 REST 端點提供單一關聯性資料表或檢視
    • 將資料表的列公開為一組扁平 JSON 文件
    • 允許應用程式在需要時使用傳統的關聯性方法
  2. 為一組相關的資料庫 schema 資料表建立單一 REST 端點
    • 將相關資料表公開為 JSON 文件組中的巢狀 JSON 物件
    • 允許應用程式採取以文件為導向的方法

下圖視覺化了這兩種使用案例。

JSON Relational Duality - Use Cases

6.1.2 REST 對偶性檢視工作流程

在 MySQL REST 服務的範圍內,JSON 關聯性對偶性檢視會公開為 REST 對偶性檢視。可以使用 CREATE REST DUALITY VIEW MRS DDL 語句或 使用 MySQL Shell for VS Code 擴充功能的 MRS 物件對話方塊以互動方式建立這些檢視。

建立 REST 對偶性檢視後,使用 REST 存取它非常簡單。以下工作流程適用。

  • 從 REST 對偶性檢視 GET 文件
  • 對文件進行任何需要的變更,包括變更巢狀 JSON 物件
  • 將文件 PUT 回 REST 對偶性檢視

下圖顯示典型的 JSON 文件更新週期。

JSON Relational Duality - Update Cycle

資料庫會自動偵測新文件中的變更,並修改基礎列,包括所有巢狀資料表。所有共用相同資料的對偶性檢視都會立即反映此變更。這大幅簡化了應用程式開發,因為與使用傳統文件資料庫相比,開發人員不再需要擔心不一致的問題。

6.2 無鎖定樂觀並行控制

可以安全地同時更新對偶性檢視,而無需使用鎖定。從資料庫擷取的物件會計算校驗和,稱為 ETag,並包含在傳回物件的 _metadata.etag 欄位中。

當該物件提交回 MRS 進行更新(透過 PUT 方法)時,原始物件的 ETag 會與當前版本的 ETag 進行比較。如果對應於該物件的資料列自首次提取以來已變更,則 ETag 將不匹配。在這種情況下,請求會失敗並返回 HTTP 狀態碼 412。用戶端必須再次提取該物件,並根據該物件的最新版本重新提交其更新請求。

物件校驗和包含來源資料列的所有欄位,以及任何聯結/包含的資料列,即使是經過篩選的欄位也包含在內。可以使用 @nocheck 屬性明確排除欄位。

範例

如果一開始,GET /myService/sakila/city/1 向用戶端返回以下 JSON 文件。

{
    "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"
    }
}

接下來,用戶端更新該物件並將城市名稱變更為 A Coruña (La Coruña),並透過呼叫 PUT /myService/sakila/city/1 提交。

{
    "city": "A Coruña (La Coruña)",
    "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"
    }
}

如果在 GETPUT 請求之間,目標物件已被變更(例如,被另一個使用者變更),則 ETag 檢查將失敗,而 PUT 請求將導致錯誤 412 Precondition Failed

6.3 互動式雙重檢視設計

雖然 REST 雙重檢視可以透過手動編寫 CREATE REST DUALITY VIEW MRS DDL 陳述式來建立,但在視覺化編輯器中設計 REST 雙重檢視通常會更容易。

MySQL Shell for VS Code 包含 MySQL REST 物件對話方塊,其中具有進階的 JSON/關聯式雙重性設計工具。使用此設計工具,可以在幾秒鐘內建立複雜的巢狀 REST 雙重檢視。

DDL 預覽按鈕允許在互動式設計 REST 雙重檢視時預覽相應的 MRS DDL 陳述式。

6.3.1 建構 JSON/關聯式雙重檢視

為單個關聯式資料表(或檢視)建構 REST 雙重檢視非常簡單。使用 MySQL Shell for VS Code 來新增資料庫綱要表會自動建立包含資料表所有欄位的相應 REST 雙重檢視,並以平面 JSON 物件呈現。

JSON Relational Editor

透過 VS Code 新增資料庫綱要表等同於呼叫沒有 graphQlObj 定義的 CREATE REST DUALITY VIEW MRS DDL 陳述式,這也會將資料表的所有欄位新增為平面 JSON 物件。

CREATE OR REPLACE REST DUALITY VIEW /city
FROM `sakila`.`city` AS MyServiceSakilaCity;

SHOW CREATE REST VIEW /city;
+-----------------------------------------------+
| CREATE REST DUALITY VIEW                      |
+-----------------------------------------------+
| CREATE OR REPLACE REST DUALITY VIEW /city     |
|     ON SERVICE /myTestService SCHEMA /sakila  |
|     AUTHENTICATION REQUIRED                   |
|     FROM sakila.city AS MyServiceSakilaCity { |
|         cityId: city_id,                      |
|         city: city,                           |
|         countryId: country_id,                |
|         lastUpdate: last_update               |
|     };                                        |
+-----------------------------------------------+

注意:為了能夠在沒有身份驗證的情況下存取 REST 物件,需要在 MySQL REST 物件對話方塊中取消勾選「需要驗證」核取方塊,或將 AUTHENTICATION NOT REQUIRED 子句新增至 MRS DDL 陳述式。這應該僅在開發期間或當 REST 端點應該公開可用時才執行。

6.3.1.1 啟用 CRUD 操作

由於預設情況下僅啟用 READ CRUD 操作(請參閱關聯式物件旁邊突出顯示的 R),因此只允許對 REST 物件執行讀取命令。若要變更此設定,請切換每個 CRUD 字母(C - 建立、R - 讀取、U - 更新和 D - 刪除)以啟用或停用 MySQL REST 物件對話方塊中的相應功能。

也可以透過在 MRS DDL 陳述式中使用註解來達到相同的效果。

CREATE OR REPLACE REST DUALITY VIEW /city
FROM `sakila`.`city` @INSERT @UPDATE @DELETE AS MyServiceSakilaCity;

下表顯示 CRUD 操作和 SQL 操作之間的對應關係。

字母 CRUD 操作 SQL 操作
C 建立 建立
R 讀取 SELECT
U 更新 更新
D 刪除 刪除

6.3.2 建立巢狀 JSON/關聯式雙重檢視

透過啟用參考資料表,該資料表的欄位會以巢狀條目形式包含在 JSON 結果中。請注意,這適用於 1:1 和 1:n 關係。

Adding a Referenced Table

這會產生以下結果。

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"
    }
}

6.3.3 建立具有非巢狀參考資料表的 JSON/關聯式雙重檢視

如果應該將參考資料表的欄位新增至上一層級,則可以啟用 Unnest 選項。

Unnest a Referenced Table

這會產生以下結果。

myService.sakila.city.findFirst();
{
    "city": "A Corua (La Corua)",
    "links": [
        {
            "rel": "self",
            "href": "/myService/sakila/city/1"
        }
    ],
    "cityId": 1,
    "country": "Spain",
    "countryId": 87,
    "lastUpdate": "2006-02-15 04:45:25.000000",
    "_metadata": {
        "etag": "48889BABCBBA1491D25DFE0D7A270FA3FDF8A16DA8E44E42C61759DE1F0D6E35"
    }
}

6.3.4 建立具有精簡參考資料表的 JSON/關聯式雙重檢視

與其取消巢狀化所有欄位並停用所有不需要的欄位,可以使用 Reduce to... 下拉式選單來選取應該為精簡操作選取的欄位。

A Reduced Referenced Table

這會產生與上述查詢相同的結果。

myService.sakila.city.findFirst();
{
    "city": "A Corua (La Corua)",
    "links": [
        {
            "rel": "self",
            "href": "/myService/sakila/city/1"
        }
    ],
    "cityId": 1,
    "country": "Spain",
    "countryId": 87,
    "lastUpdate": "2006-02-15 04:45:25.000000",
    "_metadata": {
        "etag": "48889BABCBBA1491D25DFE0D7A270FA3FDF8A16DA8E44E42C61759DE1F0D6E35"
    }
}

7 MRS 對話方塊參考

本節討論 MySQL Shell for VS Code 提供的個別 MRS UI 對話方塊。

7.1 MRS 服務對話方塊

7.1.1 REST 服務屬性

每個 REST 服務都有一組通用的屬性。

選項 說明
MRS 服務路徑 此服務的 URL 內容根目錄
註解 用於描述此服務的註解
主機名稱 如果指定,則僅處理此主機的請求
支援的通訊協定 支援的通訊協定(預設為 HTTPS)
已啟用 指定是否由 MySQL Router 提供此服務
選項 JSON 格式的高階選項

7.1.2 REST 服務高階選項

可以設定以下 JSON 格式的高階選項

  • headers:接受 JSON 物件,其中一個或多個 HTTP 標頭名稱作為鍵,其設定作為值。
  • http
    • allowedOrigin:如果設定為 auto,MySQL Router 會動態將標頭 Access-Control-Allow-Origin 設定為產生請求的網域。或者,可以將此設定為特定網域 https://mydomain.com 或網域清單(例如,["https://mydomain.com", "https://myotherdomain.com"])。
  • logging
    • exceptions:如果設定為 true,則會記錄例外狀況。
    • requests
      • body:如果設定為 true,則會記錄所有請求的完整內文。
      • headers:如果設定為 true,則只會記錄所有請求的標頭。
    • response
      • body:如果設定為 true,則會記錄所有回應的完整內文。
      • headers:如果設定為 true,則只會記錄所有回應的標頭。
    • returnInternalErrorDetails:如果設定為 true,則會將代碼為 500 的錯誤原因傳送給用戶端。
    • includeLinksInResults:如果設定為 `false`,則結果不包含導覽連結。

7.1.2.1 預設 REST 服務選項

以下範例顯示部署新服務時用作預設值的選項。

注意:這些選項僅建議用於開發,必須變更以用於生產環境。

allowedOrigin 設定為 auto 時,MySQL Router 會動態將標頭 Access-Control-Allow-Origin 設定為產生請求的網域。這樣做是為了在開發期間繞過網頁瀏覽器的跨來源資源共用 (CORS) 檢查。

{
    "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
}

在生產環境中部署 REST 服務時,需要變更以下設定

  1. allowedOrigin 變更為 REST 服務執行的網域或多個網域(例如,在生產伺服器上部署時為 "https://mydomain.com")。
  2. returnInternalErrorDetails 設定為 false
  3. 根據需要調整記錄設定。

7.2 MRS 綱要對話方塊

7.2.1 REST 綱要屬性

每個 REST 綱要都有一組通用的屬性。

選項 說明
MRS 服務路徑 此 REST 綱要的 REST 服務路徑
註解 用於描述此 MRS 綱要的註解
REST 綱要路徑 用於存取綱要的請求路徑(必須以 / 開頭)
綱要名稱 對應資料庫綱要的名稱
每頁項目數 請求此綱要的 REST 物件時要返回的預設項目數
已啟用 是否透過 REST 介面公開此 REST 綱要的 REST 物件
需要驗證 是否需要驗證才能存取此 REST 綱要的 REST 物件
選項 JSON 格式的其他選項

7.3 MRS 物件對話方塊

可以透過對話方塊設定以下方面。

  • 基本設定
    • 應該透過 MRS 公開的資料庫綱要物件
    • 如何存取 REST 物件的 URL 路徑
  • 安全性
    • 物件是公開可用還是需要驗證
    • 允許的 CRUD 操作
    • 允許在參考資料表上執行的 CRUD 操作
    • 是否應強制執行資料列擁有權以啟用資料列層級安全性
  • JSON/關聯式雙重性
    • 應該公開資料庫綱要物件的哪些欄位以及它們應該如何命名
    • 應該包含哪些參考資料表,以巢狀、非巢狀或精簡為單個欄位
The MySQL REST Object Dialog

8 驗證和授權

8.1 驗證管理

MRS 目前支援以下驗證方法。

8.1.1 MRS REST 服務特定驗證

驗證由 MRS 針對 MRS REST 服務特定帳戶進行處理。應用程式使用 SCRAM(加鹽挑戰回應驗證機制)安全地驗證使用者。

8.1.2 MySQL 內部驗證

驗證由 MRS 針對 MySQL 伺服器使用者帳戶進行處理。應用程式使用 SCRAM(加鹽挑戰回應驗證機制)安全地驗證使用者。

此驗證方法適用於未公開暴露的應用程式。

8.1.3 OAuth2 驗證

MRS 支援來自協力廠商供應商的多個 OAuth2 服務;例如,使用 Facebook、Twitter 和 Google 登入。為了使 MRS 服務能夠針對這些供應商進行驗證,需要向這些供應商註冊為開發人員,並需要建立供應商特定的驗證應用程式。然後,需要在 MRS 端設定 OAuth2 特定設定,例如 access_token 和 app_id。

8.2 授權管理

使用 MRS 時,對給定 REST 資源的存取可以有多個層級的限制

  • 公開存取 - 無需授權即可存取 REST 資源及其資料
  • 完整存取 - 驗證後,使用者可以完全存取 REST 資源的所有資料
  • 有限存取 - 驗證後,使用者只能存取 REST 資源的部分資料

MRS 內建支援多種授權模型。這些授權模型定義終端使用者可以檢視和操作給定 REST 資源的哪些資料

  • 基於使用者所有權 - 使用者可以看到自己的資料
  • 基於權限,使用角色管理
  • 基於使用者階層
  • 基於群組
  • 基於群組階層

如果給定專案的使用案例符合所提供的授權模型之一,則不需要實作自訂授權。

9 MRS 範例

MRS Shell 外掛程式隨附一組範例專案,展示 MySQL REST 服務的可能性。

它們實作為簡單的漸進式網頁應用程式 (PWA),以展示 MRS 提供的功能。

9.1 MRS 筆記範例

MRS 筆記範例實作了一個簡單的筆記應用程式,作為一個漸進式網頁應用程式 (PWA),允許使用者之間分享筆記。

mrsNotes App running on a Mobile

9.1.1 MRS 筆記開發人員展示

此範例展示了以下功能。

  • 從 JavaScript 和 TypeScript 程式碼存取 MRS REST 端點。
  • 使用 MRS 服務驗證 REST 端點來支援使用者管理
  • 使用 JSON Web Tokens (JWT) 來管理使用者會話

9.1.2 MRS 筆記快速指南

若要快速讓 MRS 筆記範例運作,請隨意遵循本指南。如果您想進一步了解這些範例,請繼續閱讀以下章節。

需要在 MySQL REST 服務上設定、建置和部署 MRS 筆記範例專案,需要執行以下步驟。

  1. 將 MRS 筆記範例專案儲存到磁碟,並使用 VS Code 開啟 VSCodeProject:examples/mrs_notes
  2. 設定 MySQL REST 服務。
  3. 建立新的 MRS 服務 (例如 /myService)。
  4. 部署 mrs_notes MySQL 資料庫綱要 examples/mrs_notes/db_schema/mrs_notes.sql
  5. 將 MRS 綱要傾印載入 MRS 服務 examples/mrs_notes/mrs_schema/mrsNotes.mrs.json
  6. 確保已啟動 MySQL Router 執行個體 (如果沒有,請啟動它)。
  7. 按照以下步驟建置並部署應用程式。

9.1.2.1 部署 TypeScript 範例

MrsNotesTS 專案實作了一個完整的 TypeScript 示範應用程式,允許使用者之間分享筆記。

  1. 如果您在上一節中尚未執行此操作,請將以下專案儲存到磁碟並使用 VS Code 開啟 VSCodeProject:examples/mrs_notes
  2. 在 VS Code 中開啟專案資料夾後,將焦點設定到 [終端] 索引標籤,並輸入 npm install 以安裝所需的節點模組
  3. 在 NPM 指令碼檢視中,執行 package.json/build 命令,該命令將建立一個名為 dist 的資料夾,其中包含部署所需的所有檔案。
  4. 在 [資料夾] 檢視中,用滑鼠右鍵按一下 dist 資料夾,然後從快顯功能表選取 [上傳資料夾到 MySQL REST 服務]。
  5. 在 [MRS 靜態內容集] 對話方塊中,設定應用程式應使用的 請求路徑,例如 /app,然後按一下 [上傳] 將檔案上傳到 MRS 服務。
  6. 開啟網頁瀏覽器並存取上一步驟中指定的完整路徑以開啟應用程式,例如 https://127.0.0.1:8443/myService/app/index.html

9.1.2.2 部署 JavaScript 範例

MrsNotes 專案也隨附一個最小的 JavaScript 示範應用程式,允許每個使用者儲存自己的筆記。

  1. 如果您在上一節中尚未執行此操作,請將以下專案儲存到磁碟並使用 VS Code 開啟 VSCodeProject:examples/mrs_notes
  2. 在 [資料夾] 檢視中,用滑鼠右鍵按一下 js_app 資料夾,然後從快顯功能表選取 [上傳資料夾到 MySQL REST 服務]。
  3. 設定應用程式應使用的路徑,例如 /app_js,然後按一下 [上傳] 以上傳檔案。
  4. 開啟網頁瀏覽器並存取上一步驟中指定的路徑以開啟應用程式,例如 https://127.0.0.1:8443/myService/app_js/index.html

9.1.3 MRS 筆記範例的 MRS 設定與組態

請參閱 MRS 文件,了解如何詳細設定與組態 MRS 服務。

如果您使用本機 MRS 部署,則可以使用這些簡化的步驟。

9.1.4 部署 mrsNotes MySQL 資料庫綱要

mrsNotes MySQL 資料庫綱要是 MRS 專案的中心。它定義了資料的結構,並且其資料庫表格儲存使用者在使用應用程式時輸入的所有資訊。

若要建立 mrsNotes 綱要,需要執行對應的 SQL 指令碼檔案。這可以透過 MySQL Shell 完成,或直接在 VS Code 中使用 VS Code 的 MySQL Shell 擴充功能完成。

  • 如果您正在 VS Code 中瀏覽本文件,請按一下 SQL 指令碼名稱旁邊的按鈕 examples/mrs_notes/db_schema/mrs_notes.sql

  • 如果您想在命令列上使用 MySQL Shell,請切換至 mrs_notes 外掛程式目錄並執行以下命令。

    mysqlsh dba@localhost –sql -f examples/mrs_notes/db_schema/mrs_notes.sql

9.1.4.1 mrsNotes EER 圖

下圖顯示 mrsNotes 綱要的所有元件。

mrsNotes MySQL Database Schema

最重要的資料庫表格是 note 表格。它儲存使用者建立的所有筆記。

user 表格會保留使用者的暱稱以及用於接收共用筆記邀請電子郵件的電子郵件地址。

user_has_note 表格用於管理與其他使用者共用筆記。

一旦選定的筆記需要在使用者之間共享時,就需要新增一個抽象層。然後,這個層允許在使用者接受參與共用筆記的邀請後,選擇性地存取其他使用者撰寫的筆記。

在此案例中,該層由一個檢視和四個預存程序組成。

  • notes_all … 使用者允許查看的所有筆記的檢視。
  • note_share … 與另一個使用者共用筆記的預存程序。
  • note_accept_share … 接受共用筆記的預存程序。
  • note_update … 更新共用筆記的預存程序
  • note_delete … 刪除共用筆記的預存程序

Copyright (c) 2022, 2023, Oracle 和/或其關聯公司。