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:
El usuario actual debe autenticarse.
El usuario actual debe ser miembro del rol necesario.
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.