Condividi tramite


Avvio rapido: Creare un'API per l'app Table con Node.js e Azure Cosmos DB

SI APPLICA A: Tabella

In questa guida introduttiva si crea un account Azure Cosmos DB for Table e si usano Esplora dati e un'app Node.js clonata da GitHub per creare tabelle ed entità. Azure Cosmos DB è un servizio di database modello che consente di creare ed eseguire rapidamente query su database di documenti, tabelle, valori chiave e grafi, con funzionalità di scalabilità orizzontale e distribuzione globale.

Prerequisiti

Applicazione di esempio

L'applicazione di esempio per questa esercitazione può essere clonata o scaricata dal repository https://github.com/Azure-Samples/msdocs-azure-data-tables-sdk-js. Nel repository di esempio sono incluse sia l'app iniziale che quella completata.

git clone https://github.com/Azure-Samples/msdocs-azure-data-tables-sdk-js

L'applicazione di esempio usa dati meteo come esempio per illustrare le funzionalità dell'API per Table. Gli oggetti che rappresentano le osservazioni meteo vengono archiviati e recuperati usando l'API per Table; vengono archiviati anche oggetti con proprietà aggiuntive per illustrare le funzionalità senza schema dell'API per Table.

Screenshot dell'applicazione completata che mostra i dati archiviati in una tabella di Azure Cosmos DB usando l'API per table.

1 - Creare un account Azure Cosmos DB

È innanzitutto necessario creare un account API Tables di Azure Cosmos DB che conterrà le tabelle usate nell'applicazione. Questa operazione può essere eseguita usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.

Per creare un account Azure Cosmos DB, accedere al portale di Azure e seguire questa procedura.

Istruzioni Schermata
Nel portale di Azure:
  1. Nella barra di ricerca nella parte superiore del portale di Azure, immettere “cosmos db".
  2. Nel menu visualizzato sotto la barra di ricerca, nell'area Servizi, selezionare l'elemento etichettato Azure Cosmos DB.
Screenshot che mostra come usare la casella di ricerca nella barra degli strumenti superiore per trovare gli account Azure Cosmos DB in Azure.
Nella pagina Azure Cosmos DB selezionare +Crea. Screenshot che mostra il percorso del pulsante Crea nella pagina Account Azure Cosmos DB in Azure.
Nella pagina Seleziona l'opzione API scegliere l'opzione Tabella di Azure. Screenshot che mostra l'opzione Tabella di Azure come opzione corretta da selezionare.
Nella pagina Crea account Azure Cosmos DB - Tabella di Azure compilare il modulo come indicato di seguito.
  1. Creare un nuovo gruppo di risorse per l'account di archiviazione denominato rg-msdocs-tables-sdk-demo selezionando il collegamento Crea nuovo in Gruppo di risorse.
  2. Assegnare all'account di archiviazione il nome cosmos-msdocs-tables-sdk-demo-XYZ, in cui XYZ è costituito da tre caratteri casuali per creare un nome di account univoco. I nomi degli account Azure Cosmos DB devono avere una lunghezza compresa tra 3 e 44 caratteri e possono contenere solo lettere minuscole, numeri o il segno meno (-).
  3. Selezionare l'area per l'account di archiviazione.
  4. Selezionare le prestazioni Standard.
  5. Ai fini di questo esempio, per Velocità effettiva con provisioning selezionare Modalità capacità.
  6. Ai fini di questo esempio, selezionare Applica nell'area Applica sconto per il livello gratuito.
  7. Selezionare il pulsante Rivedi e crea nella parte inferiore della schermata e quindi scegliere "Crea" nella schermata di riepilogo per creare l'account Azure Cosmos DB. Questo processo potrebbe richiedere alcuni minuti.
Screenshot che mostra come compilare i campi nella pagina di creazione dell'account Azure Cosmos DB.

2 - Creare una tabella

A questo punto, è necessario creare una tabella all'interno dell'account Azure Cosmos DB da usare per l'applicazione. A differenza di un database tradizionale, è necessario specificare solo il nome della tabella, non le proprietà (colonne) della tabella. Le proprietà (colonne) vengono create automaticamente nel momento in cui i dati vengono caricati nella tabella.

Nel portale di Azure completare i passaggi seguenti per creare una tabella all'interno dell'account Azure Cosmos DB.

Istruzioni Schermata
Nel portale di Azure passare alla pagina di panoramica per l'account Azure Cosmos DB. È possibile accedere alla pagina di panoramica del proprio account Azure Cosmos DB digitando il nome (cosmos-msdocs-tables-sdk-demo-XYZ) dell'account Azure Cosmos DB nella barra di ricerca superiore e cercando la voce desiderata sotto l'intestazione delle risorse. Selezionare il nome dell'account Azure Cosmos DB per passare alla pagina di panoramica. Screenshot che mostra come usare la casella di ricerca nella barra degli strumenti superiore per trovare l'account Azure Cosmos DB.
Nella pagina di panoramica selezionareAggiungi tabella. Sul lato destro della pagina viene visualizzata la finestra di dialogo Nuova tabella. Screenshot che mostra il percorso del pulsante Aggiungi tabella.
Nella finestra di dialogo Nuova tabella compilare il modulo come indicato di seguito.
  1. Nel campo dell'ID tabella immettere il nome WeatherData, che diventa il nome della tabella.
  2. Ai fini di questo esempio, selezionare Manuale nell'area Velocità effettiva tabella (scalabilità automatica).
  3. Usare il valore predefinito 400 nel campo delle UR/sec stimate.
  4. Scegliere il pulsante OK per creare la tabella.
Screenshot che mostra la finestra di dialogo Nuova tabella per una tabella di Azure Cosmos DB.

3 - Ottenere la stringa di connessione di Azure Cosmos DB

Per accedere alle tabelle in Azure Cosmos DB, l'app richiederà la stringa di connessione della tabella per l'account di archiviazione CosmosDB. La stringa di connessione può essere recuperata usando il portale di Azure, l'interfaccia della riga di comando di Azure o Azure PowerShell.

Istruzioni Schermata
Sul lato sinistro della pagina dell'account Azure Cosmos DB individuare la voce di menu denominata Stringa di connessione sotto l'intestazione Impostazioni e selezionarla. Verrà visualizzata una pagina in cui è possibile recuperare la stringa di connessione per l'account Azure Cosmos DB. Screenshot che mostra il percorso del collegamento stringa di connessione s nella pagina di Azure Cosmos DB.
Copiare il valore della STRINGA DI CONNESSIONE PRIMARIA da usare nell'applicazione. Screenshot che mostra quali stringa di connessione selezionare e usare nell'applicazione.

4 - Installare Azure Data Tables SDK per JS

Per accedere ad Azure Cosmos DB for Table da un'applicazione nodejs, installare il pacchetto Azure Data Tables SDK.

  npm install @azure/data-tables

5 - Configurare il client tabella nel file env.js

Copiare la stringa di connessione dell'account Azure Cosmos DB o dell'account di archiviazione dal portale di Azure e creare un oggetto TableServiceClient utilizzando la stringa di connessione copiata. Passare alla cartella 1-strater-app o 2-completed-app. Aggiungere quindi il valore delle variabili di ambiente corrispondenti nel file configure/env.js.

const env = {
  connectionString:"A connection string to an Azure Storage or Azure Cosmos DB account.",
  tableName: "WeatherData",
};

L'SDK di Azure comunica con Azure usando oggetti client per eseguirvi diverse operazioni. La classe TableClient è la classe usata per comunicare con Azure Cosmos DB for Table. Un'applicazione in genere crea un solo oggetto serviceClient per tabella da utilizzare in tutta l'applicazione.

const { TableClient } = require("@azure/data-tables");
const env = require("../configure/env");
const serviceClient = TableClient.fromConnectionString(
  env.connectionString,
  env.tableName
);

6 - Implementare operazioni di tabella di Azure Cosmos DB

Tutte le operazioni di tabella di Azure Cosmos DB per l'app di esempio vengono implementate nell'oggetto serviceClient che si trova nel file tableClient.js nella directory del servizio.

const { TableClient } = require("@azure/data-tables");
const env = require("../configure/env");
const serviceClient = TableClient.fromConnectionString(
  env.connectionString,
  env.tableName
);

Ottenere righe da una tabella

L' oggetto serviceClient contiene un metodo denominato listEntities che consente di selezionare righe dalla tabella. In questo esempio, poiché al metodo non viene passato alcun parametro, tutte le righe verranno selezionate dalla tabella.

const allRowsEntities = serviceClient.listEntities();

Filtrare le righe restituite da una tabella

Per filtrare le righe restituite da una tabella, è possibile passare al metodo listEntities una stringa di filtro dello stile OData. Ad esempio, se si desidera ottenere tutte le letture meteo per Chicago tra la mezzanotte del 1° luglio 2021 e la mezzanotte del 2 luglio 2021 (inclusi), passare la stringa di filtro seguente.

PartitionKey eq 'Chicago' and RowKey ge '2021-07-01 12:00' and RowKey le '2021-07-02 12:00'

È possibile visualizzare tutti gli operatori di filtro OData sul sito Web OData nella sezione Filtro Opzione query di sistema.

Quando il parametro request.args viene passato al metodo listEntities nella classe serviceClient, crea una stringa di filtro per ogni valore di proprietà non nullo. Crea quindi una stringa di filtro combinata unendo tutti i valori insieme a una clausola “and”. Questa stringa di filtro combinata viene passata al metodo listEntities sull'oggetto serviceClient e verranno restituite solo le righe corrispondenti alla stringa di filtro. È possibile usare un metodo simile nel codice per costruire stringhe di filtro appropriate come richiesto dall'applicazione.

const filterEntities = async function (option) {
  /*
    You can query data according to existing fields
    option provides some conditions to query,eg partitionKey, rowKeyDateTimeStart, rowKeyDateTimeEnd
    minTemperature, maxTemperature, minPrecipitation, maxPrecipitation
  */
  const filterEntitiesArray = [];
  const filters = [];
  if (option.partitionKey) {
    filters.push(`PartitionKey eq '${option.partitionKey}'`);
  }
  if (option.rowKeyDateTimeStart) {
    filters.push(`RowKey ge '${option.rowKeyDateTimeStart}'`);
  }
  if (option.rowKeyDateTimeEnd) {
    filters.push(`RowKey le '${option.rowKeyDateTimeEnd}'`);
  }
  if (option.minTemperature !== null) {
    filters.push(`Temperature ge ${option.minTemperature}`);
  }
  if (option.maxTemperature !== null) {
    filters.push(`Temperature le ${option.maxTemperature}`);
  }
  if (option.minPrecipitation !== null) {
    filters.push(`Precipitation ge ${option.minPrecipitation}`);
  }
  if (option.maxPrecipitation !== null) {
    filters.push(`Precipitation le ${option.maxPrecipitation}`);
  }
  const res = serviceClient.listEntities({
    queryOptions: {
      filter: filters.join(" and "),
    },
  });
  for await (const entity of res) {
    filterEntitiesArray.push(entity);
  }

  return filterEntitiesArray;
};

Inserire dati usando un oggetto TableEntity

Il modo più semplice per aggiungere dati a una tabella è utilizzare un oggetto TableEntity. In questo esempio i dati vengono mappati da un oggetto del modello di input a un oggetto TableEntity. Le proprietà dell'oggetto di input che rappresentano il nome della stazione meteo e la data/ora di osservazione vengono mappate, rispettivamente, alle proprietà PartitionKey e RowKey, che insieme formano una chiave univoca per la riga della tabella. Le proprietà aggiuntive sull'oggetto del modello di input vengono quindi mappate alle proprietà del dizionario sull'oggetto TableEntity. Infine, il metodo createEntity sull'oggetto serviceClient viene utilizzato per inserire dati nella tabella.

Modificare la funzione insertEntity nell'applicazione di esempio in modo da contenere il codice seguente.

const insertEntity = async function (entity) {

  await serviceClient.createEntity(entity);

};

Eseguire l'upsert dei dati tramite un oggetto TableEntity

Se si tenta di inserire una riga in una tabella con una combinazione chiave di partizione/chiave di riga già esistente in tale tabella, si riceve un errore. Per questo motivo, è spesso preferibile usare il metodo upsertEntity anziché il createEntity quando si aggiungono righe a una tabella. Se la combinazione chiave di partizione/chiave di riga specificata esiste già nella tabella, il upsertEntity metodo aggiorna la riga esistente. In caso contrario, la riga viene aggiunta alla tabella.

const upsertEntity = async function (entity) {

  await serviceClient.upsertEntity(entity, "Merge");

};

Inserire o eseguire l'upsert dei dati con proprietà variabili

Uno dei vantaggi dell'utilizzo di Azure Cosmos DB for Table è che se un oggetto caricato in una tabella contiene nuove proprietà, tali proprietà vengono aggiunte automaticamente alla tabella e i valori archiviati in Azure Cosmos DB. Non è necessario eseguire istruzioni DDL come ALTER TABLE per aggiungere colonne come in un database tradizionale.

Questo modello offre flessibilità all'applicazione quando si gestiscono origini dati che possono aggiungere o modificare i dati da acquisire nel tempo o quando input diversi forniscono dati diversi all'applicazione. Nell'applicazione di esempio è possibile simulare una stazione meteo che invia non solo i dati meteo di base, ma anche alcuni valori aggiuntivi. Quando un oggetto con queste nuove proprietà viene archiviato nella tabella per la prima volta, le proprietà corrispondenti (colonne) verranno automaticamente aggiunte alla tabella.

Per inserire o eseguire l'upsert di un oggetto di questo tipo usando l'API per Table, eseguire il mapping delle proprietà dell'oggetto espandibile in un oggetto TableEntity e utilizzare i metodi createEntity o upsertEntity sull'oggetto serviceClient secondo necessità.

Nell'applicazione di esempio, la funzione upsertEntity può implementare anche la funzione di inserimento o di upsert dei dati con proprietà variabili

const insertEntity = async function (entity) {
  await serviceClient.createEntity(entity);
};

const upsertEntity = async function (entity) {
  await serviceClient.upsertEntity(entity, "Merge");
};

Aggiornare un'entità

Le entità possono essere aggiornate chiamando il metodo updateEntity sull'oggetto serviceClient.

Nell'app di esempio questo oggetto viene passato al metodo upsertEntity nell'oggetto serviceClient. Aggiorna l'oggetto entità e usa il metodo upsertEntity per salvare gli aggiornamenti nel database.

const updateEntity = async function (entity) {
  await serviceClient.updateEntity(entity, "Replace");
};

7 - Eseguire il codice

Eseguire l'applicazione di esempio per interagire con Azure Cosmos DB for Table. La prima volta che si esegue l'applicazione, non saranno presenti dati perché la tabella è vuota. Usare uno qualsiasi dei pulsanti nella parte superiore dell'applicazione per aggiungere dati alla tabella.

Screenshot dell'applicazione che mostra il percorso dei pulsanti usati per inserire dati in Azure Cosmos DB usando l'API Tabella.

Selezionando il pulsante Inserisci tramite entità tabella, si apre una finestra di dialogo che consente di inserire o eseguire l'upsert di una nuova riga utilizzando un oggetto TableEntity.

Screenshot dell'applicazione che mostra la finestra di dialogo utilizzata per inserire dati usando un oggetto TableEntity.

Selezionando il pulsante Inserisci tramite dati espandibili viene visualizzata una finestra di dialogo che consente di inserire un oggetto con proprietà personalizzate, dimostrando come Azure Cosmos DB for Table aggiunga automaticamente proprietà (colonne) alla tabella quando necessario. Usare il pulsante Aggiungi campo personalizzato per aggiungere una o più nuove proprietà e dimostrare questa funzionalità.

Screenshot dell'applicazione che mostra la finestra di dialogo utilizzata per inserire dati usando un oggetto con campi personalizzati.

Usare il pulsante Inserisci dati di esempio per caricare alcuni dati di esempio nella tabella di Azure Cosmos DB.

Screenshot dell'applicazione che mostra il percorso del pulsante di inserimento dati di esempio.

Selezionare la voce Filtra i risultati nel menu in alto per aprire la pagina Filtra i risultati. In questa pagina compilare i criteri di filtro per illustrare come creare e passare una clausola di filtro ad Azure Cosmos DB for Table.

Screenshot dell'applicazione che mostra la pagina dei risultati del filtro ed evidenzia la voce di menu usata per passare alla pagina.

Pulire le risorse

Al termine dell'applicazione di esempio, è necessario rimuovere tutte le risorse di Azure relative a questo articolo dall'account Azure. È possibile eseguire questa operazione eliminando il gruppo di risorse.

È possibile eliminare un gruppo di risorse usando il portale di Azure e seguendo questa procedura.

Istruzioni Schermata
Per accedere al gruppo di risorse, nella barra di ricerca digitare il nome del gruppo di risorse. Quindi nella scheda Gruppi di risorse selezionare il nome del gruppo di risorse. Screenshot che mostra come cercare un gruppo di risorse.
Selezionare Elimina gruppo di risorse dalla barra degli strumenti nella parte superiore della pagina del gruppo di risorse. Screenshot che mostra il percorso del pulsante Elimina gruppo di risorse.
Nella parte destra della schermata verrà visualizzata una finestra di dialogo in cui viene chiesto di confermare l'eliminazione del gruppo di risorse.
  1. Digitare il nome completo del gruppo di risorse nella casella di testo per confermare l'eliminazione come indicato.
  2. Selezionare il pulsante Elimina in fondo alla pagina.
Screenshot che mostra la finestra di dialogo di conferma per l'eliminazione di un gruppo di risorse.

Passaggi successivi

In questa guida di avvio rapido si è appreso come creare un account Azure Cosmos DB, come creare una tabella con Esplora dati e come eseguire un'app. È ora possibile eseguire query sui dati usando l'API per Table.