使用 Azure Static Web Apps 連線 至資料庫 (預覽)
Azure Static Web Apps 資料庫連線功能可讓您從靜態 Web 應用程式存取資料庫,而不需要撰寫自定義伺服器端程式代碼。
建立 Web 應用程式與資料庫之間的連線之後,您就可以使用 CRUD 作業、內建授權和關聯性的完整支援來管理數據。
根據 數據 API 產生器,Azure Static Web Apps 會取得 REST 和 GraphQL 要求,並將其轉換為資料庫查詢。
資料庫連線支援的功能包括:
功能 | 描述 |
---|---|
整合式安全性 | 內建與 Azure Static Web Apps 驗證和授權安全性模型的整合。 API 端點可以使用用來保護路由的相同角色型安全性。 |
完整 CRUD 型作業 | 如需如何操作應用程式中數據的範例,請參閱 Azure Cosmos DB、Azure SQL、MySQL 或 PostgreSQL 的教學課程。 |
支援 SQL 和 NoSQL | 您可以使用關係資料庫和檔案資料庫作為應用程式的資料庫。 |
無伺服器架構 | 連線 從 0 調整為 1 個背景工作角色(預覽期間)。 |
資料庫關聯性 | 僅透過 GraphQL 端點支援。 |
CLI 支援 | 使用靜態 Web Apps CLI 在本機開發。 --data-api-location 使用 選項來處理開發中數據 API 的要求,就像在雲端中處理一樣。 |
支援的資料庫
下表顯示對不同關係型和 NoSQL 資料庫的支援。
名稱 | 類型 | 描述 | REST | GraphQL |
---|---|---|---|---|
Azure Cosmos DB | Standard | 適用於 NoSQL 和任何規模關係資料庫的全球分散式資料庫平臺。 除了 標準組態之外, gql GraphQL 端點還需要架構檔案 。 |
✔ | |
Azure SQL | Standard | 在 Azure 雲端中使用 SQL Server 資料庫引擎的受控、安全及智慧型手機系列。 | ✔ | ✔ |
適用於 MySQL 的 Azure 資料庫 | Flex | Microsoft 雲端中以 MySQL Community Edition 為基礎的關係資料庫服務 | ✔ | ✔ |
適用於 PostgreSQL 的 Azure 資料庫 | Flex | 完全受控的 PostgreSQL 資料庫即服務,可透過可預測的效能和動態延展性來處理任務關鍵性工作負載。 | ✔ | ✔ |
適用於 PostgreSQL 的 Azure 資料庫 (單一) | Single | 完全受控的 PostgreSQL 資料庫。 | ✔ | ✔ |
您可以使用下列連接類型進行資料庫存取:
- 連接字串
- 使用者指派的受控識別
- 系統指派的受控識別
端點位置
數據端點的存取可從路徑取得 /data-api
。
下表顯示要求如何路由傳送至靜態 Web 應用程式的不同部分:
路徑 | 描述 |
---|---|
example.com/api/* |
API 函式 |
example.com/data-api/* |
支援 REST 和 GraphQL 要求的資料庫連線端點。 |
example.com/* |
靜態內容 |
當您在網站上設定資料庫連線時,您可以設定路由的 /data-api/*
REST 或 GraphQL 後綴。 前置 /data-api
詞是靜態 Web Apps 的慣例,無法變更。
組態
在靜態 Web Apps 中設定資料庫連線有兩個步驟。 您必須將資料庫連線到 Azure 入口網站 中的靜態 Web 應用程式,並更新您的資料庫聯機組態檔。
如需詳細資訊,請參閱 Azure Static Web Apps 中的資料庫聯機組態。
本機開發
Azure Static Web Apps CLI (SWA CLI) 包含支援在本機開發期間使用資料庫連線。
CLI 會啟動本機 /data-api
端點,並將要求從埠 4280
傳送至適當的埠以進行數據庫存取。
以下是使用資料庫連線啟動 SWA CLI 的範例命令:
swa start ./src --data-api-location swa-db-connections
此命令會在 src 目錄中啟動 SWA CLI。 選項--data-api-location
會告知 CLI 名為 swa-db-connections 的資料夾會保存staticwebapp.database.config.json檔案。
注意
在開發中,如果您使用 連接字串 進行驗證,請使用 函env()
式從環境變數讀取 連接字串。 傳入函式的 env
字串必須以引號括住。
角色安全性
當您在 staticwebapp.database.config.json 檔案中定義實體時,您可以指定存取實體端點所需的角色清單。
下列群組態片段需要系統管理員角色才能存取訂單實體上的所有動作 (create
、 read
、 、 update
、 delete
{
...
"entities": {
"Orders": {
"source": "dbo.Orders",
"permissions": [
{
"actions": ["*"],
"role": "admin"
}
]
}
}
...
}
當您呼叫需要角色的端點時,需要下列條件:
目前的用戶必須經過驗證。
目前的用戶必須是必要角色的成員。
REST 或 GraphQL 要求必須包含標頭,其索引鍵
X-MS-API-ROLE
為 ,且角色名稱值符合實體組態規則中所列的內容。例如,下列代碼段示範如何在要求標頭中傳遞 管理員 角色。
{ method: "POST", headers: { "Content-Type": "application/json", "X-MS-API-ROLE": "admin" }, body: JSON.stringify(requestPayload) }
限制
- 資料庫必須由 Azure 的基礎結構存取。
- 在公開預覽期間,資料庫聯機會從 0 調整為 1 個資料庫背景工作角色。