你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure Static Web Apps 连接到数据库(预览版)

重要

停用通知:静态 Web 应用的数据库连接将于 2025 年 11 月 30 日结束。 立即迁移以避免中断。

Azure 静态 Web 应用数据库连接功能允许从静态 Web 应用访问数据库,而无需编写自定义服务器端代码。

在创建 Web 应用程序与数据库的连接后,可以充分支持 CRUD 操作、内置授权和关系,从而可以进行数据操作。

Azure 静态 Web 应用根据 数据 API 生成器获取 REST 和 GraphQL 请求,并将其转换为数据库查询。

数据库连接支持的功能包括:

功能 / 特点 Description
集成安全性 与 Azure Static Web Apps 身份验证和授权安全模型的内置集成。 基于角色的安全性用于保护路由,同样适用于API终结点。
完全基于 CRUD 的操作 请参阅 Azure Cosmos DBAzure SQLMySQLPostgreSQL 的教程,了解如何在应用程序中操作数据的示例。
支持 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 文件中定义实体时,可以指定访问实体终结点所需的角色列表。

以下配置片段要求管理员角色才能访问订单实体上的所有操作(createreadupdatedelete)。

{
...
"entities": { 
  "Orders": { 
    "source": "dbo.Orders", 
    "permissions": [ 
      { 
        "actions": ["*"], 
        "role": "admin" 
      }
    ]
 }
}
...
}

对需要角色的终结点进行调用时,需要满足以下条件:

  1. 当前用户必须进行身份验证。

  2. 当前用户必须是所需角色的成员。

  3. 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 个数据库工作器。

后续步骤