Vamos a construir una aplicación ASP.NET Core CRUD con NoSQL.
Voy a crear una API HTTP CRUD básica (CRUD es Create, Read, Update, Delete). Esta API funcionará con una lista de regalos: todos los artículos que quiero que me compres por mi cumpleaños. No voy a construir una interfaz de usuario, pero se puede utilizar esta API con el framework del lado del cliente de su elección (como React o Blazor, etc).
Este primer post incluirá toda la configuración del proyecto ASP.NET Core NoSQL y la base de datos de configuración. Los próximos posts construirán los puntos finales CRUD reales.
Herramientas para desarrolladores
Estoy usando Visual Studio 2022 (Enterprise), pero deberías poder seguirlo sin problemas con JetBrains Rider, VSCode, o lo que uses normalmente. (Si necesitas ayuda, estaré encantado de ayudarte).
También estoy usando Couchbase Capellaque es la oferta DBaaS (Database as a Service) de Couchbase.
Ya me he registrado para obtener una cuenta de prueba. Tú también puedes: https://cloud.couchbase.com/sign-up
En viaje-muestra bucket ya está cargado cuando despliegas tu cluster de prueba. Pero estoy usando otro cubo que he creado llamado demo.
Dentro de ese cubo, hay un Por defecto alcance, así que voy a usar eso. Y dentro de ese ámbito, he creado un lista de deseos colección. (Más información sobre ámbitos y colecciones en Capella)
Credenciales CRUD
También tendrá que crear credenciales de base de datos con acceso de lectura/escritura a todo lo que hay en el demo cubo.
Por fin, Lista blanca de direcciones IP desde el que compilarás y ejecutarás tu aplicación para poder conectarte.
Iniciar una aplicación ASP.NET Core
En Visual Studio, seleccione Archivo→Nuevo →Proyecto→ASP.NET Core Web API. Lo llamé AspNetCoreTutorial.
Estoy usando .NET 6, y todos los demás valores predeterminados están bien (observe que OpenAPI, aka Swagger, está habilitado).
Este proceso crea un sitio shell básico.
A continuación, vamos a utilizar NuGet para añadir el SDK .NET de Couchbase (CouchbaseNetClient).
Notas sobre el SDK .NET
El SDK .NET de Couchbase nos permite conectarnos a un Cluster de Couchbase. Couchbase es una base de datos distribuida, así que normalmente hay varios servidores (llamados "nodos") en un grupo (llamado "cluster") que actúan todos juntos. Un cluster tiene uno o más "buckets", que como has visto antes, contiene ámbitos, que contienen colecciones, que a su vez contienen documentos.
Los datos de un bucket se distribuyen entre los nodos del clúster, pero el SDK los trata como una única entidad lógica.
Dentro de una colección, cada documento tiene una "clave" única y un "valor" JSON.
Para la versión de prueba de Capella, sólo habrá un único nodo. Sin embargo, esto no afecta a su código: cuando se añaden nodos, el SDK es lo suficientemente inteligente como para ser capaz de encontrarlos por sí mismo.
En producción, normalmente tendrá al menos tres nodosposiblemente algunos cubos, y tantos ámbitos y colecciones como necesite (dentro de lo razonable).
Inyección de dependencia
También voy a añadir el Couchbase.Extensions.DependencyInjection paquete NuGet. Esto proporcionará métodos de extensión para añadir fácilmente capacidades de Couchbase a la inyección de dependencia integrada de ASP.NET Core.
(Este paquete facilita el uso de Couchbase con ASP.NET Core, pero es opcional).
Conectar ASP.NET Core a Couchbase Capella
Escribamos algo de código en la aplicación ASP.NET para conectar con el cluster Capella.
En Programa.csutilice el método de extensión en los servicios:
1 2 3 4 5 6 7 8 |
constructor.Servicios.AddCouchbase(x => { x.ConnectionString = "couchbases://" + "<>"; x.Nombre de usuario = "svc-wishlist"; x.Contraseña = "TOP-secret-123!"; x.HttpIgnoreRemoteCertificateMismatch = verdadero; x.KvIgnoreRemoteCertificateNameMismatch = verdadero; }); |
(En este ejemplo, estoy codificando la información de conexión, pero también puede utilizar la configuración en appsettings.json en su lugar).
Un paso más: cuando la aplicación se detiene, necesito que libere cualquier recurso de Couchbase que .NET esté utilizando.
Puede registrar código para que se ejecute en eventos de por vida, como AplicaciónParada.
1 2 3 4 |
aplicación.De por vida.AplicaciónParada.Regístrese en(() => { aplicación.Servicios.GetService<ICouchbaseLifetimeService>()?.Cerrar(); }); |
Ahora, el sistema de inyección de dependencias de ASP.NET Core inyectará automáticamente los objetos de Couchbase cuando queramos.
Modelado de datos
Antes de escribir más código, pensemos en el modelo de datos. Va a ser un modelo muy simple: sólo el nombre de un elemento para la lista de deseos.
En una base de datos de documentos NoSQL, cada dato tiene una clave y un valor JSON. La clave puede ser simplemente un GUID para nuestros propósitos (también puede hacer que sea una clave más significativa si lo desea). Cada elemento de la lista de deseos tiene un "nombre", por lo que habrá un nombre campo.
Crearé una clase C# para representar un elemento:
1 2 3 4 5 |
público clase WishlistItem { público Guía? Id { consiga; configure; } público cadena Nombre { consiga; configure; } } |
Un modelo realmente simple, pero como Couchbase no requiere un esquema predefinido, añadir más campos puede ser tan fácil como añadirlos aquí mismo en la clase C#.
Vamos a "cebar" la base de datos con un par de elementos de la Wishlist.
Navega a la colección wishlist en Couchbase Capella y añade un par de documentos.
El primer documento tendrá una clave "3ca6e87e-c3a6-4637-989d-33cbca5002b5", y le daré el nombre de "Camiseta Skyline Chili“.
El segundo documento tendrá una clave "31c9cc33-8dfe-440c-bd1b-bb038939d2e0", le daré el nombre de "Camiseta Joey Votto“.
Puede añadir otros documentos si lo desea, pero con el tiempo crearemos una aplicación en la que los documentos se añadan/modifiquen a través de la aplicación ASP.NET Core.
Controlador para acciones CRUD NoSQL
A continuación, cree un controlador ASP.NET para mis operaciones CRUD. Yo lo llamo GiftsController.
En el constructor, especifique un IBucketProvider parámetro. Se trata de un objeto que se puede utilizar para obtener un Bucket de Couchbase DependencyInjection módulo. Lo utilizaré para obtener un Cubo para el objeto demo cubo.
1 2 3 4 5 6 7 8 9 10 11 |
público clase GiftsController : Controlador { privado sólo lectura IBucketProvider _bucketProvider; público GiftsController(IBucketProvider bucketProvider) { _bucketProvider = bucketProvider; } // ... } |
Puedes ejecutar la aplicación en este punto, sólo para verificar que la conexión funciona. Todavía no habrá ningún endpoint (excepto el Previsión meteorológica ejemplo que Microsoft puso como ejemplo).
¿Y ahora qué?
Ahora tenemos un proyecto ASP.NET Core, conectado a Couchbase Capella. En la próxima entrada del blog, vamos a entrar en la creación de los puntos finales CRUD reales.
Mientras tanto, puedes:
- Prueba gratuita de Capella
- Echa un vistazo a la Couchbase Playground para .NET que puede ejecutar directamente en el navegador.