Ahora Azure Cosmos DB admite el uso compartido de recursos entre orígenes (CORS)

Publicado el 4 diciembre, 2018

Senior Software Engineer, Azure Cosmos DB

Ahora Azure Cosmos DB admite el encabezado “allowedOrigins” de uso compartido de recursos entre orígenes (CORS) para nuestra API de SQL principal. Puede configurar esta opción en el portal o mediante plantillas de ARM. Con la funcionalidad de CORS, puede hacer que su aplicación hable directamente a Cosmos DB desde el explorador usando la biblioteca @azure/cosmos de JavaScript y conseguir una experiencia de usuario final más ágil y con mayor capacidad de respuesta, ya que evita un salto adicional en un nivel intermedio.

¿Qué es Azure Cosmos DB?

Azure Cosmos DB es un servicio de base de datos multimodelo distribuido globalmente que permite leer y escribir datos desde cualquier región de Azure. Ofrece distribución global inmediata, garantiza latencias de menos de 10 milisegundos en el percentil 99 y escalado elástico del procesamiento y el almacenamiento.

Para la API de SQL principal de Azure Cosmos DB, ofrecemos una biblioteca de JavaScript que funciona en entornos de Node.js y de explorador. Ahora esta biblioteca puede aprovechar la funcionalidad de CORS. El uso de esta característica no requiere configuración en el lado cliente. Ahora que el explorador puede hablar directamente a Cosmos DB, puede obtener más rendimiento aún para escenarios web, ya que evita el salto adicional a través de una aplicación web. En el ejemplo del vínculo que se incluye a continuación, se pueden escuchar directamente los cambios de Cosmos DB en lugar de tener que configurar un servidor intermedio usando algo como WebSockets.

import {CosmosClient} from "@azure/cosmos";

const client= new CosmosClient({
   endpoint: "https://<your-cosmos-account>documents.azure.com",
   auth: {} /* Permission token or read only key. Avoid master Key */
});

const todos = client.database("TodoApp").container("Todo").items;

todos.readAll().toArray()
     .then(({result})=>{
         for(const item of result) {
             const e = document.createElement("div")
             e.innerText = item.text;
             document.body.prepend(e);
         }
     });

Este es un ejemplo sencillo de cómo poner en funcionamiento TypeScript y Webpack con la biblioteca @azure/cosmos para crear una aplicación de boletín anónima con actualizaciones en tiempo real en todos los clientes, basada totalmente en Cosmos DB.

Habilitación de CORS

Para habilitar CORS, puede usar el portal o una plantilla de ARM. Para permitir todos los orígenes, utilice un asterisco (*), o bien especifique nombres de dominios completos separados por comas (por ejemplo, https://www.midominio.com, https://midominio.com, https://api.midominio.com). Actualmente, no se pueden usar comodines como parte de un nombre de dominio (por ejemplo, https://*.midomino.net).

Para habilitar CORS en el portal, vaya a su cuenta de Cosmos DB y seleccione CORS en la lista de opciones. Desde ahí, especifique los orígenes permitidos y seleccione Guardar para actualizar su cuenta.

Habilitación de CORS

Uso de la biblioteca @azure/cosmos en un explorador

Actualmente, @azure/cosmos incluye solo la versión para CommonJS de la biblioteca en el paquete. Si desea utilizar la biblioteca en el explorador, debe utilizar una herramienta como Rollup o Webpack para crear una biblioteca compatible. Algunas bibliotecas de Node necesitan que se proporcionen objetos ficticios de explorador para ellas. A continuación se incluye un ejemplo de un archivo de configuración de webpack que tiene la configuración de objetos ficticios necesaria.

const path = require("path");

module.exports = {
   entry: "./src/index.ts",
   devtool: "inline-source-map",
   node: {
     net: "mock",
     tls: "mock"
   },
   output: {
     filename: "bundle.js",
     path: path.resolve(__dirname, "dist")
   }
};
 
Otro aspecto que debe tenerse en cuenta en el explorador es que no desea utilizar su clave maestra para la mayoría de las situaciones. Lo mejor es utilizar tokens de recurso o claves de solo lectura. Consulte este ejemplo en Github para comprender cómo funcionan los tokens de recurso y cómo se puede usar algo como Azure Functions para autenticar y autorizar a los usuarios antes de darles un token de recurso. Pronto tendremos más entradas de blog sobre cómo usar estos patrones de autenticación más avanzados con aplicaciones basadas en explorador.

Introducción

Para comenzar, eche un vistazo a nuestra biblioteca @azure/cosmos en npm y comience a usarla en sus aplicaciones basadas en explorador. Nos encantaría conocer su opinión. Envíe un correo electrónico a la dirección askcosmosdb@microsoft.com o registre los problemas en nuestro repositorio de GitHub.

Para mantenerse al día sobre las novedades y características más recientes de Azure #CosmosDB, síganos en Twitter: @AzureCosmosDB. Realmente nos interesa conocer qué compiló con Azure Cosmos DB.