Conectar a una base de datos con Azure Static Web Apps (versión preliminar)

La característica de conexión de base de datos de Azure Static Web Apps permite acceder a una base de datos desde la aplicación web estática sin escribir código personalizado del lado servidor.

Una vez creada una conexión entre la aplicación web y la base de datos, puede manipular datos con compatibilidad completa con operaciones CRUD, autorización integrada y relaciones.

En función del generador de Data API, Azure Static Web Apps toma solicitudes REST y GraphQL y las convierte en consultas de base de datos.

Entre las características admitidas por conexione de base de datos se incluyen las siguientes:

Característica Descripción
Seguridad integrada Integración integrada con el modelo de seguridad de autenticación y autorización de Azure Static Web Apps. La misma seguridad basada en roles que se usa para proteger las rutas está disponible para los puntos de conexión de API.
Operaciones basadas en CRUD completas Consulte los tutoriales de Azure Cosmos DB, Azure SQL, MySQL o PostgreSQL para ver un ejemplo sobre cómo manipular datos en la aplicación.
Admite SQL y NoSQL Puede usar bases de datos relacionales y de documentos como base de datos de la aplicación.
Arquitectura sin servidor Conectar ions escalan de 0 a 1 trabajo (durante la versión preliminar).
Relaciones de base de datos Solo se admite a través del punto de conexión de GraphQL.
Compatibilidad con la CLI Desarrolle localmente con la CLI de Static Web Apps. Use la --data-api-location opción para controlar las solicitudes a las API de datos en desarrollo tal como se controlan en la nube.

Bases de datos admitidas

En la tabla siguiente se muestra la compatibilidad con diferentes bases de datos relacionales y NoSQL.

Nombre Tipo Descripción REST GraphQL
Azure Cosmos DB Estándar Plataforma de base de datos distribuida globalmente para bases de datos NoSQL y relacionales de cualquier escala.

Además de la configuración estándar, se requiere un gql archivo de esquema para los puntos de conexión de GraphQL.
SQL de Azure Estándar Familia de productos administrados, seguros e inteligentes que usan el motor de base de datos de SQL Server en la nube de Azure.
Azure Database for MySQL Flex Servicio de base de datos relacional en la nube de Microsoft basado en MySQL Community Edition
Azure Database para PostgreSQL Flex Base de datos como servicio de PostgreSQL totalmente administrada que controla las cargas de trabajo críticas con un rendimiento predecible y escalabilidad dinámica.
Azure Database for PostgreSQL (único) Single Base de datos PostgreSQL totalmente administrada.

Puede usar los siguientes tipos de conexión para el acceso a la base de datos:

  • Cadena de conexión
  • Identidad administrada asignada por el usuario
  • Identidad administrada asignada por el sistema

Ubicación del punto de conexión

El acceso a los puntos de conexión de datos está disponible fuera de la /data-api ruta de acceso.

En la tabla siguiente se muestra cómo las solicitudes se enrutan a diferentes partes de una aplicación web estática:

Ruta de acceso Descripción
example.com/api/* Funciones de API
example.com/data-api/* Puntos de conexión de base de datos que admiten solicitudes REST y GraphQL.
example.com/* Contenido estático

Al configurar conexione de base de datos en el sitio web, puede configurar el sufijo REST o GraphQL de la /data-api/* ruta. El /data-api prefijo es una convención de Static Web Apps y no se puede cambiar.

Configuración

Hay dos pasos para configurar una conexión de base de datos en Static Web Apps. Debe conectar la base de datos a la aplicación web estática en Azure Portal y actualizar el archivo de configuración de conexione de base de datos.

Consulte Configuración de conexión de base de datos en Azure Static Web Apps para más información.

Desarrollo local

La CLI de Azure Static Web Apps (CLI de SWA) incluye compatibilidad para trabajar con conexione de base de datos durante el desarrollo local.

La CLI activa el punto de conexión local /data-api y las solicitudes de proxy desde el puerto 4280 al puerto adecuado para el acceso a la base de datos.

Este es un comando de ejemplo que inicia la CLI de SWA con una conexión de base de datos:

swa start ./src --data-api-location swa-db-connections

Este comando inicia la CLI de SWA en el directorio src . La --data-api-location opción indica a la CLI que una carpeta denominada swa-db-connections contiene el archivo staticwebapp.database.config.json .

Nota:

En desarrollo, si usa un cadena de conexión para autenticarse, use la env() función para leer un cadena de conexión de una variable de entorno. La cadena pasada a la env función debe estar rodeada de comillas.

Seguridad basada en roles

Al definir una entidad en el archivo staticwebapp.database.config.json , puede especificar una lista de roles necesarios para acceder a un punto de conexión de entidad.

El siguiente fragmento de configuración requiere el rol de administrador para acceder a todas las acciones (create, read, update, delete) en la entidad orders .

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

Al realizar llamadas a un punto de conexión que requiere un rol, se requieren las siguientes condiciones:

  1. El usuario actual debe autenticarse.

  2. El usuario actual debe ser miembro del rol necesario.

  3. La solicitud REST o GraphQL debe incluir un encabezado con la clave de X-MS-API-ROLE y un valor del nombre de rol que coincida con lo que se muestra en las reglas de configuración de entidad.

    Por ejemplo, el fragmento de código siguiente muestra cómo pasar el rol de administrador en un encabezado de solicitud.

    {
      method: "POST",
      headers: { 
        "Content-Type": "application/json",
        "X-MS-API-ROLE": "admin"
      },
      body: JSON.stringify(requestPayload)
    }
    

Restricciones

  • La infraestructura de Azure debe acceder a las bases de datos.
  • Durante la versión preliminar pública, conexione de base de datos escalar de 0 a 1 trabajador de base de datos.

Pasos siguientes