你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
停用通知:静态 Web 应用的数据库连接将于 2025 年 11 月 30 日结束。 立即迁移以避免中断。
Azure 静态 Web 应用数据库连接功能允许从静态 Web 应用访问数据库,而无需编写自定义服务器端代码。
在创建 Web 应用程序与数据库的连接后,可以充分支持 CRUD 操作、内置授权和关系,从而可以进行数据操作。
Azure 静态 Web 应用根据 数据 API 生成器获取 REST 和 GraphQL 请求,并将其转换为数据库查询。
数据库连接支持的功能包括:
| 功能 / 特点 | Description |
|---|---|
| 集成安全性 | 与 Azure Static Web Apps 身份验证和授权安全模型的内置集成。 基于角色的安全性用于保护路由,同样适用于API终结点。 |
| 完全基于 CRUD 的操作 | 请参阅 Azure Cosmos DB、Azure SQL、MySQL 或 PostgreSQL 的教程,了解如何在应用程序中操作数据的示例。 |
| 支持 SQL 和 NoSQL | 可以使用关系数据库和文档数据库作为应用程序的数据库。 |
| 无服务器体系结构 | 连接从 0 个辅助角色缩放到 1 个辅助角色(在预览期间)。 |
| 数据库关系 | 仅通过 GraphQL 终结点支持。 |
| CLI 支持 | 使用 静态 Web 应用 CLI 在本地开发。 使用此选项 --data-api-location 可以像在云中处理一样处理对开发中的数据 API 的请求。 |
支持的数据库
下表显示了对不同关系数据库和 NoSQL 数据库的支持。
| Name | 类型 | Description | REST | GraphQL |
|---|---|---|---|---|
| Azure Cosmos DB | 标准 | 适用于任何规模的 NoSQL 数据库和关系数据库的全局分布式数据库平台。 除了标准配置,GraphQL 终结点还需要一个 gql模式文件。 |
✔ | |
| Azure SQL | 标准 | 在 Azure 云中使用 SQL Server 数据库引擎的托管、安全和智能产品系列。 | ✔ | ✔ |
| Azure Database for MySQL | Flex | 基于 MySQL Community Edition 的 Microsoft 云中的关系数据库服务 | ✔ | ✔ |
| Azure Database for PostgreSQL | Flex | 完全托管的 PostgreSQL 数据库即服务,用于处理具有可预测性能和动态可伸缩性的任务关键型工作负荷。 | ✔ | ✔ |
| Azure Database for PostgreSQL (单一) | Single | 完全托管的 PostgreSQL 数据库。 | ✔ | ✔ |
可以使用以下连接类型进行数据库访问:
- 连接字符串
- 用户分配的托管标识
- 系统分配的托管标识
终结点位置
可以在 /data-api 路径之外访问数据终结点。
下表显示了请求如何路由到静态 Web 应用的不同部分:
| 路径 | Description |
|---|---|
example.com/api/* |
API 函数 |
example.com/data-api/* |
支持 REST 和 GraphQL 请求的数据库连接终结点。 |
example.com/* |
静态内容 |
在网站上配置数据库连接时,可以配置路由的 /data-api/* REST 或 GraphQL 后缀。 前缀 /data-api 是静态 Web 应用的约定,不能更改。
配置
在静态 Web 应用中配置数据库连接有两个步骤。 需要在 Azure 门户中将数据库连接到静态 Web 应用,并更新数据库连接配置文件。
有关更多详细信息 ,请参阅 Azure Static Web Apps 中的数据库连接配置 。
本地开发
Azure 静态 Web 应用 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 个数据库工作器。