Share via


Inicio rápido: Biblioteca de Azure Cosmos DB for NoSQL para Go

SE APLICA A: NoSQL

Introducción a la biblioteca cliente de Azure Cosmos DB for NoSQL para Go para consultar datos en los contenedores y realizar operaciones comunes en elementos individuales. Siga estos pasos para implementar una solución mínima en su entorno mediante la Azure Developer CLI.

Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (Go) | Azure Developer CLI

Requisitos previos

Instalación

Implemente el contenedor de desarrollo de este proyecto en su entorno. A continuación, use la Azure Developer CLI (azd) para crear una cuenta de Azure Cosmos DB for NoSQL e implementar una aplicación de ejemplo en contenedor. La aplicación de ejemplo usa la biblioteca cliente para administrar, crear, leer y consultar datos de ejemplo.

Abrir en GitHub Codespaces

Apertura en Contenedor de desarrollo

Importante

Las cuentas de GitHub incluyen un derecho de almacenamiento y horas de núcleo sin costo alguno. Para obtener más información, consulte el almacenamiento y las horas de núcleo incluidas para las cuentas de GitHub.

  1. Abra un terminal en el directorio raíz del proyecto.

  2. Autentíquese en Azure Developer CLI mediante azd auth login. Siga los pasos especificados por la herramienta para autenticarse en la CLI mediante sus credenciales de Azure preferidas.

    azd auth login
    
  3. Ejecute azd init para inicializar el proyecto.

    azd init
    
  4. Durante la inicialización, configure un nombre de entorno único.

    Sugerencia

    El nombre del entorno también se usará como nombre del grupo de recursos de destino. Para este inicio rápido, considere la posibilidad de usar msdocs-cosmos-db.

  5. Implemente la cuenta de Azure Cosmos DB mediante azd up. Las plantillas de Bicep también implementan una aplicación web de muestra.

    azd up
    
  6. Durante el proceso de aprovisionamiento, seleccione la suscripción y la ubicación deseada. Espere a que se complete el proceso de aprovisionamiento. El proceso puede tardar aproximadamente cinco minutos.

  7. Una vez realizado el aprovisionamiento de los recursos de Azure, se incluye una dirección URL a la aplicación web en ejecución en la salida.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Use la dirección URL de la consola para ir a la aplicación web en el explorador. Observe la salida de la aplicación en ejecución.

    Captura de pantalla de la aplicación web en ejecución.

Instalación de la biblioteca cliente

La biblioteca cliente está disponible a través de Go, como paquete azcosmos.

  1. Abra un terminal y vaya a la carpeta /src.

    cd ./src
    
  2. Si aún no está instalado, instale el paquete azcosmos mediante go install.

    go install github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos
    
  3. Además, instale el paquete azidentity si aún no está instalado.

    go install github.com/Azure/azure-sdk-for-go/sdk/azidentity
    
  4. Abra y revise el archivo src/go.mod para validar que existen las entradas github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos y github.com/Azure/azure-sdk-for-go/sdk/azidentity.

Modelo de objetos

Nombre Descripción
CosmosClient Esta clase es la clase de cliente principal y se usa para administrar bases de datos o metadatos de toda la cuenta.
CosmosDatabase Esta clase representa una base de datos dentro de la cuenta.
CosmosContainer Esta clase se usa principalmente para realizar operaciones de lectura, actualización y eliminación en el contenedor o en los elementos almacenados en el contenedor.
PartitionKey Esta clase representa una clave de partición lógica. Esta clase es necesaria para muchas operaciones y consultas comunes.

Ejemplos de código

El código de ejemplo de la plantilla usa una base de datos denominada cosmicworks y un contenedor denominado products. El contenedor products contiene detalles como el nombre, la categoría, la cantidad, un identificador único y una marca de venta para cada producto. El contenedor usa la propiedad /category como clave de partición lógica.

Autenticar el cliente

Deben autorizarse las solicitudes de aplicación a la mayor parte de servicios de Azure. Use el tipo DefaultAzureCredential como forma preferida de implementar una conexión sin contraseña entre las aplicaciones y Azure Cosmos DB for NoSQL. DefaultAzureCredential admite varios métodos de autenticación y determina el que se debe usar en tiempo de ejecución.

Importante

También puede autorizar directamente las solicitudes a los servicios de Azure mediante contraseñas, cadenas de conexión u otras credenciales. Sin embargo, este enfoque debe usarse con precaución. Los desarrolladores deben ser meticulosos y no exponer nunca estos secretos en una ubicación que no sea segura. Cualquier persona que obtenga acceso a la contraseña o a la clave secreta puede autenticarse en el servicio de base de datos. DefaultAzureCredential ofrece ventajas de seguridad y administración mejoradas con respecto a la clave de cuenta para permitir la autenticación sin contraseña sin riesgo de almacenar claves.

En este ejemplo se crea una nueva instancia de CosmosClient mediante azcosmos.NewClient y se autentica mediante una instancia DefaultAzureCredential.

credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    return err
}

clientOptions := azcosmos.ClientOptions{
    EnableContentResponseOnWrite: true,
}

client, err := azcosmos.NewClient(endpoint, credential, &clientOptions)
if err != nil {
    return err
}

Obtención de una base de datos

Use client.NewDatabase para recuperar la base de datos existente denominada cosmicworks.

database, err := client.NewDatabase("cosmicworks")
if err != nil {
    return err
}

Obtención de un contenedor

Recupere el contenedor existente products mediante database.NewContainer.

container, err := database.NewContainer("products")
if err != nil {
    return err
}

Crear un elemento

Compile un tipo de Go con todos los miembros que desea serializar en JSON. En este ejemplo, el tipo tiene un identificador único y campos para categoría, nombre, cantidad, precio y venta.

type Item struct {
    Id 			string	`json:"id"`
    Category 	string	`json:"category"`
    Name 		string	`json:"name"`
    Quantity 	int		`json:"quantity"`
    Price		float32	`json:"price"`
    Clearance	bool	`json:"clearance"`
}

Cree un elemento en el contenedor mediante container.UpsertItem. Este método "actualiza" eficazmente el elemento si ya existe.

item := Item {
    Id:			"70b63682-b93a-4c77-aad2-65501347265f",
    Category:	"gear-surf-surfboards",
    Name:		"Yamba Surfboard",
    Quantity:	12,
    Price:		850.00,
    Clearance:	false,
}

partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")

context := context.TODO()

bytes, err := json.Marshal(item)
if err != nil {
    return err
}

response, err := container.UpsertItem(context, partitionKey, bytes, nil)
if err != nil {
    return err
}

Lectura de un elemento

Se puede realizar una operación de lectura de punto mediante el identificador único (id) y los campos de clave de partición. Use container.ReadItem para recuperar de forma eficaz el elemento específico.

partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")

context := context.TODO()

itemId := "70b63682-b93a-4c77-aad2-65501347265f"

response, err := container.ReadItem(context, partitionKey, itemId, nil)
if err != nil {
    return err
}

if response.RawResponse.StatusCode == 200 {
    read_item := Item{}
    err := json.Unmarshal(response.Value, &read_item)
    if err != nil {
        return err
    }

Elementos de consulta

Realice una consulta en varios elementos de un contenedor mediante container.NewQueryItemsPager. Busque todos los elementos de una categoría especificada mediante esta consulta con parámetros:

SELECT * FROM products p WHERE p.category = @category
partitionKey := azcosmos.NewPartitionKeyString("gear-surf-surfboards")

query := "SELECT * FROM products p WHERE p.category = @category"

queryOptions := azcosmos.QueryOptions{
    QueryParameters: []azcosmos.QueryParameter{
        {Name: "@category", Value: "gear-surf-surfboards"},
    },
}

pager := container.NewQueryItemsPager(query, partitionKey, &queryOptions)

Analice los resultados paginados de la consulta realizando un bucle en cada página de resultados mediante pager.NextPage. Use pager.More para determinar si quedan resultados al principio de cada bucle.

context := context.TODO()

items := []Item{}

requestCharge := float32(0)

for pager.More() {
    response, err := pager.NextPage(context)
    if err != nil {
        return err
    }

    requestCharge += response.RequestCharge

    for _, bytes := range response.Items {
        item := Item{}
        err := json.Unmarshal(bytes, &item)
        if err != nil {
            return err
        }
        items = append(items, item)
    }
}

Limpieza de recursos

Cuando ya no necesite la aplicación o los recursos de ejemplo, quite la implementación correspondiente y todos los recursos.

azd down

En GitHub Codespaces, elimine el espacio de código en ejecución para maximizar los derechos de almacenamiento y núcleo.

Paso siguiente