Introduzione all'API Firestore in modalità Datastore

Questa pagina offre un breve esercizio sulla creazione di una semplice applicazione TaskList a riga di comando con l'API Firestore in modalità Datastore. L'applicazione TaskList archivia, elenca, aggiorna e rimuove le attività.

Prerequisiti

  1. Capacità di scrivere ed eseguire un'applicazione a riga di comando nei linguaggi di programmazione utilizzati in questo argomento
    Oltre a una conoscenza di base di come sviluppare applicazioni, dovresti essere in grado di scaricare e installare librerie aggiuntive prima di provare questo tutorial.
  2. Un progetto della console Google Cloud con l'API della modalità Datastore abilitata
    Le applicazioni che utilizzano la modalità Datastore devono essere associate a un progetto della console Google Cloud con l'API della modalità Datastore attivata. Questo progetto fornisce le credenziali di autenticazione che utilizzi nell'applicazione per identificarla in Google e autorizzarne l'utilizzo dell'API in modalità Datastore.
    Segui queste istruzioni per creare un progetto, abilitare l'API in modalità Datastore e configurare l'ambiente di sviluppo locale con le credenziali di autenticazione utilizzando il comando gcloud auth login. Prendi nota dell'ID del progetto, che utilizzerai più avanti.
  3. Un'applicazione App Engine attiva
    I progetti che utilizzano l'API in modalità Datastore richiedono un'applicazione App Engine attiva. Apri la dashboard di App Engine e verifica che il progetto abbia un'app App Engine attiva.
    Crea un'app App Engine, se necessario. L'app non deve essere disattivata.

Installazione e configurazione

Installa le librerie client e configura eventuali impostazioni aggiuntive per il tuo ambiente di sviluppo.

C#

  1. Assicurati di avere installato Visual Studio (versione 2013 o successive).
  2. Scarica l'applicazione di esempio TaskList da qui.
  3. Estrai i file dal file ZIP in una directory della cartella Documenti.
  4. In Visual Studio, apri il file dotnet-docs-samples-master\datastore\api\Datastore.sln.
  5. Nella finestra Esplora soluzioni di Visual Studio, fai clic con il pulsante destro del mouse sul progetto TaskList e scegli Imposta come progetto di avvio.
  6. Fai di nuovo clic con il pulsante destro del mouse sul progetto TaskList e scegli Proprietà.
  7. Nella finestra Proprietà, fai clic su Debug e digita l'ID del progetto Google Cloud Platform nella casella Argomenti della riga di comando:.

    Finestra di debug di Visual Studio

  8. Fai clic su File e poi su Salva per salvare le modifiche.

  9. Esegui l'applicazione. Premi F5 sulla tastiera.

Go

  1. Clona l'applicazione di esempio TaskList.

    go get github.com/GoogleCloudPlatform/golang-samples/datastore/tasks
    
  2. Cambia le directory in cui hai clonato l'esempio:

    cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/datastore/tasks
    
  3. Al prompt dei comandi, esegui questo comando, dove <project-id> è l'ID del tuo progetto Google Cloud Platform.

    export DATASTORE_PROJECT_ID=<project-id>
    

    Gli utenti Windows devono usare set anziché export.

  4. Esegui l'applicazione.

    go run tasks.go
    

Java

  1. Assicurati di aver installato Maven e Java (versione 8 o successiva).

  2. Scarica l'applicazione di esempio TaskList da qui.

  3. Al prompt dei comandi, decomprimi il download:

    unzip main.zip
    
  4. Cambia directory nell'applicazione TaskList:

    cd java-datastore-main/samples/snippets
    
  5. Esegui questo comando, dove <project-id> è l'ID del tuo progetto Google Cloud Platform.

    gcloud config set project <project-id>
    
  6. Compila ed esegui l'applicazione.

    mvn clean compile
    mvn exec:java -Dexec.mainClass="com.google.datastore.snippets.TaskList"
    

Node.js

  1. Prepara l'ambiente per lo sviluppo in Node.js.

  2. Scarica l'applicazione di esempio TaskList da qui.

  3. Decomprimi il download:

    unzip master.zip
    
  4. Cambia directory nell'applicazione TaskList:

    cd nodejs-datastore-master/samples
    
  5. Installa le dipendenze e collega l'applicazione:

    npm install
    
  6. Al prompt dei comandi, esegui questo comando, dove <project-id> è l'ID del tuo progetto Google Cloud Platform.

    export GCLOUD_PROJECT=<project-id>
    

    Gli utenti Windows devono usare set anziché export.

  7. Esegui l'applicazione.

    node tasks.js
    

PHP

  1. Assicurati di aver installato PHP (versione 5.6 o successive) e Composer.
  2. Scarica l'applicazione di esempio TaskList da qui.
  3. Decomprimi il download:

    unzip master.zip
    
  4. Cambia directory nell'applicazione TaskList:

    cd php-docs-samples-master/datastore/tutorial
    
  5. Installare le dipendenze.

    composer install
    
  6. Esegui l'applicazione.

    php src/list_tasks.php
    

Python

  1. Assicurati di aver installato Python (versione 2.7.9 o successive), pip e virtualenv.
  2. Attiva una sessione virtualenv.

    virtualenv venv
    source venv/bin/activate
    
  3. Scarica l'applicazione di esempio TaskList da qui.

  4. Decomprimi il download:

    unzip master.zip
    
  5. Cambia directory nell'applicazione TaskList:

    cd python-docs-samples-master/datastore/cloud-client
    
  6. Installa le dipendenze:

    pip install -r requirements.txt
    
  7. Esegui l'applicazione. Utilizza l'ID del tuo progetto Google Cloud Platform per <project-id>.

    python tasks.py new project-id
    

Ruby

  1. Assicurati di avere installato Ruby e Bundler.

  2. Scarica l'applicazione di esempio TaskList da qui.

  3. Decomprimi il download:

    unzip master.zip
    
  4. Cambia directory nell'applicazione TaskList:

    cd google-cloud-ruby-master/google-cloud-datastore/samples
    
  5. Installa le dipendenze:

    bundle install
    
  6. Al prompt dei comandi, esegui questo comando, dove <project-id> è l'ID del tuo progetto Google Cloud Platform.

    export GOOGLE_CLOUD_PROJECT=<project-id>
    

    Gli utenti Windows devono usare set anziché export.

  7. Esegui l'applicazione.

    bundle exec ruby tasks.rb
    

Creazione di un oggetto di servizio autorizzato

Per effettuare richieste autenticate alle API Google Cloud utilizzando le librerie client delle API di Google, devi:

  • Recupera la credenziale da utilizzare per le richieste.
  • Creare un oggetto di servizio che utilizza quella credenziale.

Puoi quindi effettuare chiamate API richiamando i metodi sull'oggetto di servizio in modalità Datastore.

Per questo esempio, recupererai le Credenziali predefinite dell'applicazione dall'ambiente e le passerai come argomento per creare l'oggetto di servizio.

Ecco la chiamata per creare l'oggetto di servizio autorizzato in modalità Datastore:

C#

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

// Create an authorized Datastore service using Application Default Credentials.
_db = DatastoreDb.Create(projectId);
// Create a Key factory to construct keys associated with this project.
_keyFactory = _db.CreateKeyFactory("Task");

Go

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"log"

	"cloud.google.com/go/datastore"
)

func createClient(projectID string) (*datastore.Client, error) {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectID)
	if err != nil {
		log.Fatalf("Could not create datastore client: %v", err)
	}
	// Note: call the following from main() to ensure the client
	// properly frees all resources.
	// defer client.Close()
	return client, nil
}

Java

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

// Create an authorized Datastore service using Application Default Credentials.
private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService();

// Create a Key factory to construct keys associated with this project.
private final KeyFactory keyFactory = datastore.newKeyFactory().setKind("Task");

Node.js

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

// By default, the client will authenticate using the service account file
// specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use
// the project specified by the GCLOUD_PROJECT environment variable. See
// https://googlecloudplatform.github.io/google-cloud-node/#/docs/datastore/latest/guides/authentication
const {Datastore} = require('@google-cloud/datastore');

// Creates a client
const datastore = new Datastore();

PHP

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

use Google\Cloud\Datastore\DatastoreClient;

/**
 * Create a Cloud Datastore client.
 *
 * @param string $projectId The Google Cloud project ID.
 */
function build_service(string $projectId)
{
    $datastore = new DatastoreClient(['projectId' => $projectId]);
    return $datastore;
}

Python

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import datastore

def create_client(project_id):
    return datastore.Client(project_id)

Ruby

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

require "google/cloud/datastore"

datastore = Google::Cloud::Datastore.new

Archiviazione dei dati

Gli oggetti in modalità Datastore sono noti come entità e ogni entità è di un tipo specifico. L'applicazione TaskList archivierà le entità di tipo Task, con le seguenti proprietà:

  • description: una stringa specificata dall'utente come descrizione dell'attività
  • created: una data che mostra la data di creazione iniziale dell'attività
  • done: un valore booleano che indica se l'attività è stata completata

Quando l'utente aggiunge una nuova attività, l'applicazione TaskList crea un'entità Task con i valori per le proprietà elencate sopra:

C#

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/// <summary>
///  Adds a task entity to the Datastore
/// </summary>
/// <param name="description">The task description.</param>
/// <returns>The key of the entity.</returns>
Key AddTask(string description)
{
    Entity task = new Entity()
    {
        Key = _keyFactory.CreateIncompleteKey(),
        ["description"] = new Value()
        {
            StringValue = description,
            ExcludeFromIndexes = true
        },
        ["created"] = DateTime.UtcNow,
        ["done"] = false
    };
    return _db.Insert(task);
}

Go

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"log"
	"time"

	"cloud.google.com/go/datastore"
)

// Task is the model used to store tasks in the datastore.
type Task struct {
	Desc    string    `datastore:"description"`
	Created time.Time `datastore:"created"`
	Done    bool      `datastore:"done"`
	id      int64     // The integer ID used in the datastore.
}

// AddTask adds a task with the given description to the datastore,
// returning the key of the newly created entity.
func AddTask(projectID string, desc string) (*datastore.Key, error) {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectID)
	if err != nil {
		log.Fatalf("Could not create datastore client: %v", err)
	}
	defer client.Close()
	task := &Task{
		Desc:    desc,
		Created: time.Now(),
	}
	key := datastore.IncompleteKey("Task", nil)
	return client.Put(ctx, key, task)

}

Java

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/**
 * Adds a task entity to the Datastore.
 *
 * @param description The task description
 * @return The {@link Key} of the entity
 * @throws DatastoreException if the ID allocation or put fails
 */
Key addTask(String description) {
  Key key = datastore.allocateId(keyFactory.newKey());
  Entity task =
      Entity.newBuilder(key)
          .set(
              "description",
              StringValue.newBuilder(description).setExcludeFromIndexes(true).build())
          .set("created", Timestamp.now())
          .set("done", false)
          .build();
  datastore.put(task);
  return key;
}

Node.js

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

async function addTask(description) {
  const taskKey = datastore.key('Task');
  const entity = {
    key: taskKey,
    data: [
      {
        name: 'created',
        value: new Date().toJSON(),
      },
      {
        name: 'description',
        value: description,
        excludeFromIndexes: true,
      },
      {
        name: 'done',
        value: false,
      },
    ],
  };

  try {
    await datastore.save(entity);
    console.log(`Task ${taskKey.id} created successfully.`);
  } catch (err) {
    console.error('ERROR:', err);
  }
}

PHP

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

use Google\Cloud\Datastore\DatastoreClient;

/**
 * Create a new task with a given description.
 *
 * @param string $projectId The Google Cloud project ID.
 * @param string $description
 */
function add_task(string $projectId, string $description)
{
    $datastore = new DatastoreClient(['projectId' => $projectId]);

    $taskKey = $datastore->key('Task');
    $task = $datastore->entity(
        $taskKey,
        [
            'created' => new DateTime(),
            'description' => $description,
            'done' => false
        ],
        ['excludeFromIndexes' => ['description']]
    );
    $datastore->insert($task);
    printf('Created new task with ID %d.' . PHP_EOL, $task->key()->pathEnd()['id']);
}

Python

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import datastore

def add_task(client: datastore.Client, description: str):
    # Create an incomplete key for an entity of kind "Task". An incomplete
    # key is one where Datastore will automatically generate an Id
    key = client.key("Task")

    # Create an unsaved Entity object, and tell Datastore not to index the
    # `description` field
    task = datastore.Entity(key, exclude_from_indexes=("description",))

    # Apply new field values and save the Task entity to Datastore
    task.update(
        {
            "created": datetime.datetime.now(tz=datetime.timezone.utc),
            "description": description,
            "done": False,
        }
    )
    client.put(task)
    return task.key

Ruby

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def add_task description
  require "google/cloud/datastore"

  datastore = Google::Cloud::Datastore.new

  task = datastore.entity "Task" do |t|
    t["description"] = description
    t["created"]     = Time.now
    t["done"]        = false
    t.exclude_from_indexes! "description", true
  end

  datastore.save task

  puts task.key.id

  task.key.id
end

Per questa applicazione, forniremo anche un metodo per aggiornare la proprietà done, per indicare che l'attività è stata completata:

C#

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/// <summary>
/// Marks a task entity as done.
/// </summary>
/// <param name="id">The ID of the task entity as given by Key.</param>
/// <returns>true if the task was found.</returns>
bool MarkDone(long id)
{
    using (var transaction = _db.BeginTransaction())
    {
        Entity task = transaction.Lookup(_keyFactory.CreateKey(id));
        if (task != null)
        {
            task["done"] = true;
            transaction.Update(task);
        }
        transaction.Commit();
        return task != null;
    }
}

Go

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"log"

	"cloud.google.com/go/datastore"
)

// MarkDone marks the task done with the given ID.
func MarkDone(projectID string, taskID int64) error {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectID)
	if err != nil {
		log.Fatalf("Could not create datastore client: %v", err)
	}
	defer client.Close()
	// Create a key using the given integer ID.
	key := datastore.IDKey("Task", taskID, nil)

	// In a transaction load each task, set done to true and store.
	_, err = client.RunInTransaction(ctx, func(tx *datastore.Transaction) error {
		var task Task
		if err := tx.Get(key, &task); err != nil {
			return err
		}
		task.Done = true
		_, err := tx.Put(key, &task)
		return err
	})
	return err
}

Java

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/**
 * Marks a task entity as done.
 *
 * @param id The ID of the task entity as given by {@link Key#id()}
 * @return true if the task was found, false if not
 * @throws DatastoreException if the transaction fails
 */
boolean markDone(long id) {
  Transaction transaction = datastore.newTransaction();
  try {
    Entity task = transaction.get(keyFactory.newKey(id));
    if (task != null) {
      transaction.put(Entity.newBuilder(task).set("done", true).build());
    }
    transaction.commit();
    return task != null;
  } finally {
    if (transaction.isActive()) {
      transaction.rollback();
    }
  }
}

Node.js

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

async function markDone(taskId) {
  const transaction = datastore.transaction();
  const taskKey = datastore.key(['Task', datastore.int(taskId)]);

  try {
    await transaction.run();
    const [task] = await transaction.get(taskKey);
    task.done = true;
    transaction.save({
      key: taskKey,
      data: task,
    });
    await transaction.commit();
    console.log(`Task ${taskId} updated successfully.`);
  } catch (err) {
    await transaction.rollback();
  }
}

PHP

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

use Google\Cloud\Datastore\DatastoreClient;

/**
 * Mark a task with a given id as done.
 *
 * @param string $projectId The Google Cloud project ID.
 * @param string $taskId
 */
function mark_done(string $projectId, string $taskId)
{
    $datastore = new DatastoreClient(['projectId' => $projectId]);

    $taskKey = $datastore->key('Task', $taskId);
    $transaction = $datastore->transaction();
    $task = $transaction->lookup($taskKey);
    $task['done'] = true;
    $transaction->upsert($task);
    $transaction->commit();
    printf('Task %d updated successfully.' . PHP_EOL, $taskId);
}

Python

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import datastore

def mark_done(client: datastore.Client, task_id: str | int):
    with client.transaction():
        # Create a key for an entity of kind "Task", and with the supplied
        # `task_id` as its Id
        key = client.key("Task", task_id)
        # Use that key to load the entity
        task = client.get(key)

        if not task:
            raise ValueError(f"Task {task_id} does not exist.")

        # Update a field indicating that the associated
        # work has been completed
        task["done"] = True

        # Persist the change back to Datastore
        client.put(task)

Ruby

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def mark_done task_id
  require "google/cloud/datastore"

  datastore = Google::Cloud::Datastore.new

  task = datastore.find "Task", task_id

  task["done"] = true

  datastore.save task
end

Ecco il metodo per eliminare un'entità Task, utilizzando la chiave dell'entità Task:

C#

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/// <summary>
/// Deletes a task entity.
/// </summary>
/// <param name="id">The ID of the task entity as given by Key.</param>
void DeleteTask(long id)
{
    _db.Delete(_keyFactory.CreateKey(id));
}

Go

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"log"

	"cloud.google.com/go/datastore"
)

// DeleteTask deletes the task with the given ID.
func DeleteTask(projectID string, taskID int64) error {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectID)
	if err != nil {
		log.Fatalf("Could not create datastore client: %v", err)
	}
	return client.Delete(ctx, datastore.IDKey("Task", taskID, nil))
}

Java

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/**
 * Deletes a task entity.
 *
 * @param id The ID of the task entity as given by {@link Key#id()}
 * @throws DatastoreException if the delete fails
 */
void deleteTask(long id) {
  datastore.delete(keyFactory.newKey(id));
}

Node.js

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

async function deleteTask(taskId) {
  const taskKey = datastore.key(['Task', datastore.int(taskId)]);

  await datastore.delete(taskKey);
  console.log(`Task ${taskId} deleted successfully.`);
}

PHP

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

use Google\Cloud\Datastore\DatastoreClient;

/**
 * Delete a task with a given id.
 *
 * @param string $projectId The Google Cloud project ID.
 * @param string $taskId
 */
function delete_task(string $projectId, string $taskId)
{
    $datastore = new DatastoreClient(['projectId' => $projectId]);

    $taskKey = $datastore->key('Task', $taskId);
    $datastore->delete($taskKey);

    printf('Task %d deleted successfully.' . PHP_EOL, $taskId);
}

Python

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import datastore

def delete_task(client: datastore.Client, task_id: str | int):
    # Create a key for an entity of kind "Task", and with the supplied
    # `task_id` as its Id
    key = client.key("Task", task_id)
    # Use that key to delete its associated document, if it exists
    client.delete(key)

Ruby

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def delete_task task_id
  require "google/cloud/datastore"

  datastore = Google::Cloud::Datastore.new

  task = datastore.find "Task", task_id

  datastore.delete task
end

Esecuzione di una query

Oltre a recuperare le entità dalla modalità Datastore direttamente dalle loro chiavi, un'applicazione può eseguire una query per recuperarle in base ai valori delle loro proprietà. Una query tipica include quanto segue:

  • Un tipo di entità a cui si applica la query
  • Zero o più filtri, ad esempio per selezionare i tipi le cui proprietà corrispondono a un valore
  • Zero o più ordini di ordinamento per mettere in sequenza i risultati

Per questa applicazione, eseguiremo una query in modalità Datastore per Task entità ordinate in base all'ora di creazione:

C#

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/// <summary>
/// Returns a list of all task entities in ascending order of creation time.
/// </summary>
IEnumerable<Entity> ListTasks()
{
    Query query = new Query("Task")
    {
        Order = { { "created", PropertyOrder.Types.Direction.Descending } }
    };
    return _db.RunQuery(query).Entities;
}

Go

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"log"

	"cloud.google.com/go/datastore"
)

// ListTasks returns all the tasks in ascending order of creation time.
func ListTasks(projectID string) ([]*Task, error) {
	ctx := context.Background()
	client, err := datastore.NewClient(ctx, projectID)
	if err != nil {
		log.Fatalf("Could not create datastore client: %v", err)
	}

	var tasks []*Task
	// Create a query to fetch all Task entities, ordered by "created".
	query := datastore.NewQuery("Task").Order("created")
	keys, err := client.GetAll(ctx, query, &tasks)
	if err != nil {
		return nil, err
	}

	// Set the id field on each Task from the corresponding key.
	for i, key := range keys {
		tasks[i].id = key.ID
	}

	return tasks, nil
}

Java

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

/**
 * Returns a list of all task entities in ascending order of creation time.
 *
 * @throws DatastoreException if the query fails
 */
Iterator<Entity> listTasks() {
  Query<Entity> query =
      Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.asc("created")).build();
  return datastore.run(query);
}

Node.js

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

async function listTasks() {
  const query = datastore.createQuery('Task').order('created');

  const [tasks] = await datastore.runQuery(query);
  console.log('Tasks:');
  tasks.forEach(task => {
    const taskKey = task[datastore.KEY];
    console.log(taskKey.id, task);
  });
}

PHP

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API PHP di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

use Google\Cloud\Datastore\DatastoreClient;

/**
 * Return an iterator for all the tasks in ascending order of creation time.
 *
 * @param string $projectId The Google Cloud project ID.
 */
function list_tasks(string $projectId)
{
    $datastore = new DatastoreClient(['projectId' => $projectId]);

    $query = $datastore->query()
        ->kind('Task')
        ->order('created');
    $result = $datastore->runQuery($query);
    /* @var Entity $task */
    foreach ($result as $index => $task) {
        printf('ID: %s' . PHP_EOL, $task->key()->pathEnd()['id']);
        printf('  Description: %s' . PHP_EOL, $task['description']);
        printf('  Status: %s' . PHP_EOL, $task['done'] ? 'done' : 'created');
        printf('  Created: %s' . PHP_EOL, $task['created']->format('Y-m-d H:i:s e'));
        print(PHP_EOL);
    }
}

Python

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

from google.cloud import datastore

def list_tasks(client: datastore.Client):
    # Create a query against all of your objects of kind "Task"
    query = client.query(kind="Task")
    query.order = ["created"]

    return list(query.fetch())

Ruby

Per scoprire come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Ruby di Cloud Datastore.

Per eseguire l'autenticazione in Cloud Datastore, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

def list_tasks
  require "google/cloud/datastore"

  datastore = Google::Cloud::Datastore.new

  query = datastore.query("Task").order("created")
  tasks = datastore.run query

  tasks.each do |t|
    puts t["description"]
    puts t["done"] ? "  Done" : "  Not Done"
    puts "  ID: #{t.key.id}"
  end
end

Passaggi successivi

Questo tutorial illustra solo i passaggi più basilari necessari per effettuare chiamate all'API in modalità Datastore da un'applicazione a riga di comando. La modalità Datastore supporta transazioni ACID rapide e altamente scalabili, query di tipo SQL, indici e altro ancora.