Connessione a un database con App Web statiche di Azure (anteprima)

La funzionalità di connessione al database App Web statiche di Azure consente di accedere a un database dall'app Web statica senza scrivere codice sul lato server personalizzato.

Dopo aver creato una connessione tra l'applicazione Web e il database, è possibile modificare i dati con il supporto completo per le operazioni CRUD, l'autorizzazione predefinita e le relazioni.

In base al generatore di API dati, App Web statiche di Azure accetta le richieste REST e GraphQL e le converte in query di database.

Le funzionalità supportate dalle connessioni di database includono:

Funzionalità Descrizione
Sicurezza integrata Integrazione predefinita con App Web statiche di Azure modello di sicurezza di autenticazione e autorizzazione. La stessa sicurezza basata sui ruoli usata per proteggere le route è disponibile per gli endpoint API.
Operazioni complete basate su CRUD Vedere le esercitazioni per Azure Cosmos DB, Azure SQL, MySQL o PostgreSQL per un esempio su come modificare i dati nell'applicazione.
Supporta SQL e NoSQL È possibile usare database relazionali e di documenti come database dell'applicazione.
Architettura serverless Connessione scalabilità da 0 a 1 ruolo di lavoro (durante l'anteprima).
Relazioni tra database Supportato solo tramite l'endpoint GraphQL.
Supporto dell'interfaccia della riga di comando Sviluppare in locale con l'interfaccia della riga di comando di App Web statiche. Usare l'opzione --data-api-location per gestire le richieste alle API dati nello sviluppo proprio come vengono gestite nel cloud.

Database supportati

La tabella seguente illustra il supporto per database relazionali e NoSQL diversi.

Nome Digita Descrizione REST GraphQL
Azure Cosmos DB Standard Piattaforma di database distribuita a livello globale sia per i database NoSQL che per i database relazionali di qualsiasi scala.

Oltre alla configurazione standard, è necessario un gql file di schema per gli endpoint GraphQL.
Azure SQL Standard Famiglia di prodotti gestiti, sicuri e intelligenti che usano il motore di database di SQL Server nel cloud di Azure.
Database di Azure per MySQL Flex Servizio di database relazionale nel cloud Microsoft basato su MySQL Community Edition
Database di Azure per PostgreSQL Flex Database come servizio PostgreSQL completamente gestito che gestisce carichi di lavoro cruciali con prestazioni prevedibili e scalabilità dinamica.
Database di Azure per PostgreSQL (singolo) Singola Database PostgreSQL completamente gestito.

Per l'accesso al database è possibile usare i tipi di connessione seguenti:

  • Connection string
  • Identità gestita assegnata dall'utente
  • Identità gestita assegnata dal sistema

Posizione dell'endpoint

L'accesso agli endpoint dati è disponibile all'esterno del /data-api percorso.

La tabella seguente illustra come le richieste instradano a parti diverse di un'app Web statica:

Percorso Descrizione
example.com/api/* Funzioni API
example.com/data-api/* Endpoint di connessione del database che supportano le richieste REST e GraphQL.
example.com/* Contenuto statico

Quando si configurano le connessioni di database nel sito Web, è possibile configurare il suffisso REST o GraphQL della /data-api/* route. Il /data-api prefisso è una convenzione di App Web statiche e non può essere modificato.

Configurazione

Esistono due passaggi per configurare una connessione di database in App Web statiche. È necessario connettere il database all'app Web statica nel portale di Azure e aggiornare il file di configurazione delle connessioni di database.

Per altre informazioni, vedere Configurazione della connessione al database in App Web statiche di Azure.

Sviluppo locale

L'interfaccia della riga di comando di App Web statiche di Azure include il supporto per l'uso delle connessioni di database durante lo sviluppo locale.

L'interfaccia della riga di comando attiva l'endpoint locale /data-api e le richieste proxy dalla porta 4280 alla porta appropriata per l'accesso al database.

Ecco un comando di esempio che avvia l'interfaccia della riga di comando di SWA con una connessione al database:

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

Questo comando avvia l'interfaccia della riga di comando di SWA nella directory src . L'opzione --data-api-location indica all'interfaccia della riga di comando che una cartella denominata swa-db-connections contiene il file staticwebapp.database.config.json .

Nota

In fase di sviluppo, se si usa un stringa di connessione per l'autenticazione, usare la env() funzione per leggere un stringa di connessione da una variabile di ambiente. La stringa passata alla env funzione deve essere racchiusa tra virgolette.

Sicurezza basata su ruoli

Quando si definisce un'entità nel file staticwebapp.database.config.json , è possibile specificare un elenco di ruoli necessari per accedere a un endpoint di entità.

Il frammento di configurazione seguente richiede il ruolo di amministratore per accedere a tutte le azioni (create, read, update, delete) nell'entità orders.

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

Quando si effettuano chiamate a un endpoint che richiede un ruolo, sono necessarie le condizioni seguenti:

  1. L'utente corrente deve essere autenticato.

  2. L'utente corrente deve essere membro del ruolo richiesto.

  3. La richiesta REST o GraphQL deve includere un'intestazione con la chiave di X-MS-API-ROLE e un valore del nome del ruolo corrispondente a quanto elencato nelle regole di configurazione dell'entità.

    Ad esempio, il frammento di codice seguente illustra come passare il ruolo di amministratore in un'intestazione di richiesta.

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

Vincoli

  • I database devono essere accessibili dall'infrastruttura di Azure.
  • Durante l'anteprima pubblica, le connessioni di database sono ridimensionate da 0 a 1 ruolo di lavoro del database.

Passaggi successivi