{"id":7785,"date":"2019-11-07T06:13:23","date_gmt":"2019-11-07T14:13:23","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7785"},"modified":"2025-06-13T19:40:23","modified_gmt":"2025-06-14T02:40:23","slug":"asp-net-core-microservices-getting-started","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-microservices-getting-started\/","title":{"rendered":"ASP.NET Core Microservicios: Primeros pasos"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Microservicios ASP.NET Core: aplicaciones que ser\u00e1n responsables de una \u00fanica porci\u00f3n \"vertical\" de una arquitectura global de aplicaciones\/servicios.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_why_asp_net_core_microservices\">\u00bfPor qu\u00e9 microservicios ASP.NET Core?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Hay muchos <a href=\"https:\/\/microservices.io\/\">opiniones y recomendaciones<\/a> sobre qu\u00e9 son los microservicios, cu\u00e1ndo utilizar microservicios frente a un monolito, y mucho m\u00e1s.<\/p>\n<\/div>\n<blockquote class=\"twitter-tweet\" data-width=\"550\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\">Microservicios <a href=\"https:\/\/t.co\/3xYWUgP2QW\">pic.twitter.com\/3xYWUgP2QW<\/a><\/p>\n<p>- David Neal \ud83e\udd53\ud83e\udd51 (@reverentgeek) <a href=\"https:\/\/twitter.com\/reverentgeek\/status\/884470574667501569?ref_src=twsrc%5Etfw\">10 de julio de 2017<\/a><\/p><\/blockquote>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><\/p>\n<div class=\"paragraph\">\n<p>Este art\u00edculo no va a abordar esas cuestiones en su totalidad. En su lugar, s\u00f3lo vamos a intentar <a href=\"https:\/\/chrisrichardson.net\/post\/antipatterns\/2019\/04\/09\/antipattern-flying-before-walking.html\">caminar antes de volar<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Consideremos que estamos explorando <a href=\"https:\/\/www.couchbase.com\/blog\/es\/microservices-architecture-in-couchbase\/\">arquitectura de microservicios<\/a>y queremos aprovechar la persistencia pol\u00edglota para utilizar una base de datos NoSQL (Couchbase) para un caso de uso particular. Para nuestro proyecto, vamos a ver una <a href=\"https:\/\/microservices.io\/patterns\/data\/database-per-service.html\">Base de datos por servicio<\/a> y utilizar Docker (docker-compose) para gestionar la base de datos de los microservicios de ASP.NET Core. <a href=\"https:\/\/www.couchbase.com\/blog\/es\/proof-of-concept-move-relational\/\">prueba de concepto<\/a>.<\/p>\n<\/div>\n<div class=\"sidebarblock\">\n<div class=\"content\">\n<div class=\"paragraph\">\n<p>Las bases de datos de documentos NoSQL como Couchbase son buenas para un <a href=\"https:\/\/resources.couchbase.com\/sdr\/couchbase-use-cases\">una variedad cada vez mayor de casos de uso<\/a> incluida la gesti\u00f3n de perfiles, la gesti\u00f3n de contenidos, la personalizaci\u00f3n y mucho m\u00e1s.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Esta entrada de blog utilizar\u00e1 Couchbase Server, pero puedes aplicar los conceptos b\u00e1sicos aqu\u00ed a las otras bases de datos en tu arquitectura de microservicios tambi\u00e9n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Estoy usando <strong>ASP.NET Core<\/strong> porque es un framework multiplataforma y de c\u00f3digo abierto. Adem\u00e1s, <a href=\"https:\/\/visualstudio.microsoft.com\/\">Visual Studio<\/a> (aunque no es obligatorio) nos proporcionar\u00e1 algunas herramientas \u00fatiles para trabajar con Docker y <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a>. Pero, de nuevo, puedes aplicar lo b\u00e1sico aqu\u00ed a cualquier framework web o lenguaje de programaci\u00f3n de tu elecci\u00f3n.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_1_create_a_new_solution\">Paso 1: Crear una nueva soluci\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Voy a utilizar Visual Studio para esta entrada del blog, pero se puede lograr el mismo efecto (con tal vez un poco m\u00e1s de trabajo) en Visual Studio Code o en la l\u00ednea de comandos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Cree un nuevo proyecto ASP.NET Core. He llamado al m\u00edo HelloMicroservice (y al <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/126MicroserviceDocker\/src\/HelloMicroservice\">el c\u00f3digo fuente completo est\u00e1 disponible en GitHub<\/a> para su referencia.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12601-visual-studio-new-project.png\" alt=\"New project in Visual Studio\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Para mi microservicio ASP.NET Core, tambi\u00e9n tom\u00e9 estas decisiones en Visual Studio:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Aplicaci\u00f3n web MVC (Esto genera algo de HTML b\u00e1sico para fines de visualizaci\u00f3n, pero usted podr\u00eda utilizar f\u00e1cilmente un proyecto de API en su lugar)<\/li>\n<li>ASP.NET Core 3 (la \u00faltima versi\u00f3n de ASP.NET Core en el momento de redactar este documento)<\/li>\n<li>Configurar para HTTPS (no es estrictamente necesario, pero es una buena idea)<\/li>\n<li>Activar la compatibilidad con Docker<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12602-visual-studio-wizard.png\" alt=\"Visual Studio new project wizard\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En este punto, deber\u00edas tener un proyecto ASP.NET Core muy b\u00e1sico. A continuaci\u00f3n, a\u00f1adiremos algo de orquestaci\u00f3n y una base de datos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_2_add_docker_compose_support\">Paso 2: A\u00f1adir soporte para docker-compose<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Haga clic con el bot\u00f3n derecho del rat\u00f3n en <strong>proyecto<\/strong>y haga clic en \"A\u00f1adir\" y luego en \"Soporte de Container Orchestrator\".<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12603-add-container-orch.png\" alt=\"Add Container O\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tenga en cuenta que el \u00fanico prop\u00f3sito de este proyecto es iniciar el desarrollo de una prueba de concepto para ASP.NET Core Microservices. Docker-compose es m\u00e1s f\u00e1cil de manejar que Kubernetes para el desarrollo en m\u00e1quina local. Por eso elijo la opci\u00f3n \"Docker Compose\", aunque eventualmente quiera <strong>despliegue<\/strong> a Kubernetes.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12604-docker-compose.png\" alt=\"Docker Compose\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tambi\u00e9n eleg\u00ed Linux, porque es lo que espero desplegar m\u00e1s tarde.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez completado este paso, se a\u00f1adir\u00e1 un elemento \"docker-compose\" a su soluci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12605-docker-compose-project.png\" alt=\"Docker Compose in Visual Studio\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si echas un vistazo al archivo docker-compose.yml, ver\u00e1s que tiene <strong>un<\/strong> definido en \u00e9l: <code>hellomicroservice<\/code>. Observe tambi\u00e9n que \"Docker Compose\" aparece ahora en la barra de herramientas de Visual Studio.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12606-docker-compose-button.png\" alt=\"Docker Compose button\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>En este punto, puedes pulsar CTRL+F5 para ejecutar. Visual Studio utilizar\u00e1 Docker Compose para crear una imagen de tu proyecto y ejecutarla dentro de Docker. Tu navegador deber\u00eda abrirse autom\u00e1ticamente, y ver\u00e1s la pantalla de \"Bienvenida\" est\u00e1ndar<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12607-asp-net-basic.png\" alt=\"ASP.NET Welcome\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Estamos progresando. Lo siguiente que tenemos que hacer es ejecutar una base de datos con docker-compose y hacer que nuestra aplicaci\u00f3n ASP.NET Core se comunique con la base de datos. Una vez completados estos pasos, tendremos el shell m\u00ednimo de ASP.NET Core Microservices.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_3_add_database_orchestration_to_docker_compose\">Paso 3: A\u00f1adir orquestaci\u00f3n de base de datos a docker-compose<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Couchbase hace <a href=\"https:\/\/hub.docker.com\/_\/couchbase\">im\u00e1genes de contenedores oficiales disponibles en Docker Hub<\/a>. Para utilizar estas im\u00e1genes, vamos a a\u00f1adir otro servicio bajo <code>servicios:<\/code> en el archivo docker-compose.yml:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-Docker\" data-lang=\"Docker\">services:\r\n  couchbase:\r\n    image: couchbase:enterprise-6.0.3\r\n    volumes:\r\n    - \".\/couchbase:\/opt\/couchbase\/var\" # local folder where couchbase data stored\r\n    ports:\r\n    - \"8091:8091\" # Allows local access to mgmt UI<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Lo b\u00e1sico que necesitas es:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>couchbase:<\/code> Esto inicia una definici\u00f3n de servicio llamada \"couchbase\" (puedes llamarlo de otra manera si lo deseas)<\/li>\n<li><code>imagen: couchbase:enterprise-6.0.3<\/code> La imagen a utilizar para este servicio. Siempre es una buena idea ser expl\u00edcito y utilizar una etiqueta como esta, de lo contrario puede por defecto a la \"\u00faltima\" imagen, que no es necesariamente lo que quieres.<\/li>\n<li><code>puertos:<\/code> Define qu\u00e9 n\u00famero(s) de puerto exponer <em>fuera de<\/em> de Docker. Estoy exponiendo s\u00f3lo 8091, porque ese es el n\u00famero de puerto de Couchbase UI (ver tambi\u00e9n: <a href=\"https:\/\/docs.couchbase.com\/server\/current\/install\/install-ports.html\">Requisitos de red y cortafuegos<\/a>)<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>En <code>vol\u00famenes:<\/code> no es estrictamente necesario. Sin embargo, el uso de un volumen significa que incluso cuando la imagen couchbase deja de funcionar, los archivos de datos en <code>\/opt\/couchbase\/var<\/code> se guardar\u00e1 en el ordenador host (el sistema de archivos de tu ordenador) y se podr\u00e1 montar de nuevo la pr\u00f3xima vez que ejecutes la imagen. Esto significa que cualquier dato que pongas en couchbase seguir\u00e1 ah\u00ed la pr\u00f3xima vez que ejecutes la imagen.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si pulsa CTRL+F5 para ejecutar la aplicaci\u00f3n, Docker Compose iniciar\u00e1 la orquestaci\u00f3n, incluyendo <em>ambos<\/em> el hellomicroservice <em>y<\/em> la imagen couchbase. No tienen nada que ver entre s\u00ed (todav\u00eda) aparte de que se est\u00e1n ejecutando uno al lado del otro dentro de Docker. Si abres una l\u00ednea de comandos y ejecutas <code>docker ps<\/code>deber\u00edas ver algo como esto:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-PowerShell\" data-lang=\"PowerShell\">PS C:\\WINDOWS\\system32&gt; docker ps\r\nIMAGE                        COMMAND      CREATED   STATUS  PORTS          NAMES\r\nhellomicroservice:dev        \"tail -f\u00e2\u20ac\u00a6\"   8 min\u00e2\u20ac\u00a6    Up 8\u00e2\u20ac\u00a6   0.0.0.0...     dockercompose1524\u00e2\u20ac\u00a656534_hellomicroservice_1\r\ncouchbase:enterprise-6.0.3   \"\/entryp\u00e2\u20ac\u00a6\"   8 min\u00e2\u20ac\u00a6    Up 8\u00e2\u20ac\u00a6   8092-8096...   dockercompose1524\u00e2\u20ac\u00a656534_couchbase_1\r\nPS C:\\WINDOWS\\system32&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>(He truncado mucho el texto anterior para que quepa la informaci\u00f3n pertinente en el ancho de esta entrada de blog).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_4_configuration_changes\">Paso 4: Cambios en la configuraci\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Porque he utilizado el stock <code>couchbase:empresa-6.0.3<\/code> Docker, todav\u00eda tengo que abrir la interfaz de usuario de Couchbase (https:\/\/localhost:8091) y configurar el cl\u00faster manualmente. Ver \"pr\u00f3ximos pasos\" al final para algunas opciones para automatizar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12608-cluster-setup.png\" alt=\"Set up Couchbase Cluster\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Hay mucha <a href=\"https:\/\/docs.couchbase.com\/server\/current\/getting-started\/start-here.html\">documentaci\u00f3n para guiarle en este proceso<\/a>as\u00ed que no lo repetir\u00e9 aqu\u00ed. Observar\u00e9 que estoy utilizando las credenciales \"Administrador\" y \"contrase\u00f1a\". Tambi\u00e9n he <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/manage-buckets\/create-bucket.html\">creado un cubo<\/a> llamado <strong>hellomicroservice<\/strong>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez creado el bucket, el siguiente paso es hacer que la aplicaci\u00f3n ASP.NET Core se comunique con la base de datos. Abra docker-compose.yml y actualice el archivo <code>hellomicroservices:<\/code> definici\u00f3n a:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-Docker\" data-lang=\"Docker\">hellomicroservice:\r\n  image: ${DOCKER_REGISTRY-}hellomicroservice\r\n  build:\r\n    context: .\r\n    dockerfile: HelloMicroservice\/Dockerfile\r\n  environment:\r\n    Couchbase__Servers__0: https:\/\/couchbase:8091\/ # Reference to the \"couchbase\" service name on line 4\r\n  depends_on:\r\n  - couchbase # Reference to the \"couchbase\" service name on line 4\r\n  command: [\".\/wait-for-it.sh\", \"https:\/\/couchbase:8091\"]<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Desglosemos cada una de estas partes:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>medio ambiente:<\/code> Esto le dice a docker-compose que cree variables de entorno.<\/li>\n<li><code>Couchbase__Servidores__0<\/code> El nombre de una variable de entorno. El nombre aqu\u00ed es importante. Esto se corresponder\u00e1 con appsettings.json m\u00e1s tarde.<\/li>\n<li><code>https:\/\/couchbase:8091\/<\/code> La URL que ASP.NET Core necesitar\u00e1 para conectarse al servicio couchbase. Si nombr\u00f3 el servicio de otra manera que \"couchbase\", utilice ese nombre aqu\u00ed tambi\u00e9n.<\/li>\n<li><code>depende_de<\/code> As\u00ed es como docker-compose sabr\u00e1 en qu\u00e9 orden iniciar los servicios.<\/li>\n<li><code>comando<\/code> Un comando para ejecutar una vez que el servicio se inicia.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>En este ejemplo, estoy utilizando <a href=\"https:\/\/github.com\/vishnubob\/wait-for-it\"><code>espera-por-ello.sh<\/code><\/a>un script que esperar\u00e1 a que el host\/puerto dado est\u00e9 disponible. En la imagen Docker de Couchbase Server, Couchbase Server tardar\u00e1 unos segundos en iniciarse, as\u00ed que este script esperar\u00e1 hasta que eso ocurra para proceder.<\/p>\n<\/div>\n<div class=\"sidebarblock\">\n<div class=\"content\">\n<div class=\"paragraph\">\n<p>Utilizar la espera <strong>es opcional<\/strong>pero cuando est\u00e1s en medio del desarrollo, esto puede ahorrarte algunos dolores de cabeza. (Tenga en cuenta que no he incluido wait-for-it.sh en mi <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/126MicroserviceDocker\/src\/HelloMicroservice\">ejemplo de repositorio GitHub<\/a>).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Por \u00faltimo, para que el proyecto ASP.NET Core se comunique con Couchbase, utilic\u00e9 la funci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/dependency-injection-aspnet-couchbase\/\">Extensi\u00f3n de la inyecci\u00f3n de dependencia<\/a> de NuGet:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\" data-lang=\"C#\">services.AddCouchbase(Configuration.GetSection(\"Couchbase\"));<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Por defecto, la configuraci\u00f3n se extraer\u00e1 de appsettings.json. <strong>SIN EMBARGO<\/strong>recuerde que una variable de entorno de <code>Couchbase__Servidores__0<\/code> se define en docker-compose.yml. ASP.NET Core examinar\u00e1 las variables de entorno y anular\u00e1 la configuraci\u00f3n de las aplicaciones utilizando esos valores. As\u00ed que realmente no importa lo que <em>valor<\/em> est\u00e1 en appsettings.json (o appsettings.Development.json) para \"Servidores\":<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\" data-lang=\"JavaScript\">{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Debug\",\r\n      \"System\": \"Information\",\r\n      \"Microsoft\": \"Information\"\r\n    }\r\n  },\r\n  \"Couchbase\" : {\r\n    \"Username\": \"Administrator\",\r\n    \"Password\": \"password\",\r\n    \"Servers\" : [\"https:\/\/thiswillbeoverwritten\"]\r\n  }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Sin embargo, el nombre de usuario y la contrase\u00f1a se siguen leyendo de appsettings.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_5_using_the_database\">Paso 5: Utilizar la base de datos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Por \u00faltimo, vamos a asegurarnos de que la aplicaci\u00f3n ASP.NET Core es capaz de comunicarse con la base de datos. He a\u00f1adido un <code>Inserte<\/code> y <code>Visite<\/code> a la <code>InicioControlador<\/code> <code>\u00cdndice<\/code> m\u00e9todo:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\" data-lang=\"C#\">public IActionResult Index()\r\n{\r\n    var id = Guid.NewGuid().ToString();\r\n\r\n    _bucket.Insert(new Document&lt;dynamic&gt;\r\n    {\r\n        Id = id,\r\n        Content = new\r\n        {\r\n            hello = \"microservice\",\r\n            foo = Path.GetRandomFileName()\r\n        }\r\n    });\r\n\r\n    var doc = _bucket.Get&lt;dynamic&gt;(id);\r\n\r\n    return View(doc);\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Algunos cambios correspondientes a la vista en <code>\u00cdndice.cshtml<\/code>:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-C#\" data-lang=\"C#\">@model Couchbase.IOperationResult&lt;dynamic&gt;\r\n@{\r\n    ViewData[&quot;Title&quot;] = &quot;Home Page&quot;;\r\n}\r\n\r\n&lt;div class=&quot;text-center&quot;&gt;\r\n    &lt;h1 class=&quot;display-4&quot;&gt;Bienvenido&lt;\/h1&gt;\r\n    &lt;p&gt;M&aacute;s informaci&oacute;n &lt;a href=&quot;https:\/\/docs.microsoft.com\/aspnet\/core&quot;&gt;building Web apps with ASP.NET Core&lt;\/a&gt;.&lt;\/p&gt;\r\n&lt;\/div&gt;\r\n\r\n&lt;p&gt;Created a new document:&lt;\/p&gt;\r\n&lt;ul&gt;\r\n    &lt;li&gt;ID: @Model.Id&lt;\/li&gt;\r\n    &lt;li&gt;Document: @Model.Value&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Y ahora, tenemos los fundamentos de ASP.NET Core Microservices en su lugar. Pulsa CTRL+F5 para ejecutar el servicio. Cuando se abra el navegador, deber\u00edas ver algo como esto:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/11\/12609-asp-net-core-microservice.png\" alt=\"ASP.NET Core Microservices in action\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si en lugar de eso ves un mensaje de error, aseg\u00farate de que has configurado Couchbase Server correctamente, has creado un bucket con el nombre correcto, has utilizado las credenciales de inicio de sesi\u00f3n correctas en appsettings.json y aseg\u00farate de que tu docker-compose.yml coincide con los ejemplos anteriores.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Pr\u00f3ximos pasos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Ahora puede desarrollar sus microservicios ASP.NET Core. Como desarrollador, la imagen Docker de su aplicaci\u00f3n ASP.NET Core ser\u00e1 su producto final. Dependiendo de d\u00f3nde\/c\u00f3mo su organizaci\u00f3n planea desplegar, sus pr\u00f3ximos pasos variar\u00e1n mucho.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Esto es s\u00f3lo el principio, pero aqu\u00ed tienes m\u00e1s cosas que deber\u00edas explorar:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Vol\u00famenes<\/strong>. Cierra Visual Studio por completo. Despu\u00e9s de unos segundos, las im\u00e1genes Docker desaparecer\u00e1n (intente <code>docker ps<\/code> de nuevo para verificarlo). Ahora, abre Visual Studio y CTRL+F5 de nuevo. Como hemos usado un volumen, los datos que almacenaste en Couchbase deber\u00edan seguir ah\u00ed. Si esto es lo que quieres para el desarrollo, est\u00e1s en buena forma.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Automatizaci\u00f3n<\/strong>. Si prefieres que los datos se borren y se regeneren cada vez, tendr\u00e1s que mirar de crear una imagen Docker personalizada. Tambi\u00e9n puedes consultar la excelente <a href=\"https:\/\/github.com\/brantburnett\/couchbasefakeit\">proyecto couchbasefakeit<\/a>que incluye una serie de herramientas, variables, scripts, etc, para inicializar Couchbase Server y poblarlo con \u00edndices y datos falsos. Puedes ver un ejemplo de esto en <a href=\"https:\/\/gist.github.com\/brantburnett\/2330ebfb3b75a0ceb86be456e0a50f39\">Gist que Brant Burnett comparti\u00f3 conmigo<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Kubernetes<\/strong>. Si planea desplegar Couchbase Server (o cualquier base de datos) en contenedores, es probable que desee consultar Kubernetes y <a href=\"https:\/\/operatorhub.io\/\">Operadores de Kubernetes<\/a>que facilitan la gesti\u00f3n de bases de datos en cl\u00fasteres Kubernetes. Muchos proveedores de bases de datos han creado Operadores Kubernetes, y Couchbase fue el primer proveedor NoSQL en lanzar un Operador Kubernetes. <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/cloud\/kubernetes\/\">Operador aut\u00f3nomo de Kubernetes<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_special_thanks\">Agradecimientos especiales<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Esta entrada de blog no habr\u00eda sido posible sin la tremenda ayuda de la Comunidad Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Gracias a <a href=\"https:\/\/twitter.com\/btburnett3\">Brant Burnett<\/a> por compartir conmigo el proceso de desarrollo de microservicios de su empresa.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Gracias a Calvin Allen por trabajar conmigo en este proceso en mi <a href=\"https:\/\/www.twitch.tv\/matthewdgroves\">Codificaci\u00f3n en directo en Twitch<\/a> y para <a href=\"https:\/\/github.com\/CalvinAllen\/docker-playground\">introduci\u00e9ndome en wait-for-it<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>ASP.NET Core Microservices: applications that will be responsible for a single &#8220;vertical&#8221; slice of an overall application\/service architecture. Why ASP.NET Core microservices? There are a lot of opinions and recommendations about what microservices are, when to use microservices vs a [&hellip;]<\/p>","protected":false},"author":71,"featured_media":7804,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,1816,2322],"tags":[1519,1896,2103],"ppma_author":[8937],"class_list":["post-7785","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-couchbase-server","category-kubernetes","tag-docker","tag-docker-compose","tag-microservices"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ASP.NET Core Microservices: Getting Started - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"ASP.NET Core Microservices will be responsible for a single &quot;vertical&quot; slice of an overall application\/service architecture.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-microservices-getting-started\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ASP.NET Core Microservices: Getting Started\" \/>\n<meta property=\"og:description\" content=\"ASP.NET Core Microservices will be responsible for a single &quot;vertical&quot; slice of an overall application\/service architecture.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-microservices-getting-started\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-07T14:13:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:40:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"410\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"ASP.NET Core Microservices: Getting Started\",\"datePublished\":\"2019-11-07T14:13:23+00:00\",\"dateModified\":\"2025-06-14T02:40:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/\"},\"wordCount\":1621,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png\",\"keywords\":[\"docker\",\"docker-compose\",\"microservices\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"Couchbase Server\",\"Kubernetes\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/\",\"name\":\"ASP.NET Core Microservices: Getting Started - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png\",\"datePublished\":\"2019-11-07T14:13:23+00:00\",\"dateModified\":\"2025-06-14T02:40:23+00:00\",\"description\":\"ASP.NET Core Microservices will be responsible for a single \\\"vertical\\\" slice of an overall application\/service architecture.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png\",\"width\":1024,\"height\":410,\"caption\":\"Tiltshift, outside Waterloo station https:\/\/www.flickr.com\/photos\/cloudsoup\/2148928955\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ASP.NET Core Microservices: Getting Started\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ASP.NET Core Microservices: Getting Started - The Couchbase Blog","description":"ASP.NET Core Microservices will be responsible for a single \"vertical\" slice of an overall application\/service architecture.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-microservices-getting-started\/","og_locale":"es_MX","og_type":"article","og_title":"ASP.NET Core Microservices: Getting Started","og_description":"ASP.NET Core Microservices will be responsible for a single \"vertical\" slice of an overall application\/service architecture.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/asp-net-core-microservices-getting-started\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-11-07T14:13:23+00:00","article_modified_time":"2025-06-14T02:40:23+00:00","og_image":[{"width":1024,"height":410,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png","type":"image\/png"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"ASP.NET Core Microservices: Getting Started","datePublished":"2019-11-07T14:13:23+00:00","dateModified":"2025-06-14T02:40:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/"},"wordCount":1621,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png","keywords":["docker","docker-compose","microservices"],"articleSection":[".NET","ASP.NET","Couchbase Server","Kubernetes"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/","url":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/","name":"ASP.NET Core Microservices: Getting Started - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png","datePublished":"2019-11-07T14:13:23+00:00","dateModified":"2025-06-14T02:40:23+00:00","description":"ASP.NET Core Microservices will be responsible for a single \"vertical\" slice of an overall application\/service architecture.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/11\/126-hero-microservices-tilt-shift.png","width":1024,"height":410,"caption":"Tiltshift, outside Waterloo station https:\/\/www.flickr.com\/photos\/cloudsoup\/2148928955"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ASP.NET Core Microservices: Getting Started"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"A Matthew D. Groves le encanta programar.  No importa si se trata de C#, jQuery o PHP: enviar\u00e1 pull requests para cualquier cosa.  Lleva codificando profesionalmente desde que escribi\u00f3 una aplicaci\u00f3n de punto de venta en QuickBASIC para la pizzer\u00eda de sus padres, all\u00e1 por los a\u00f1os noventa.  Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores.  Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/7785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=7785"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/7785\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/7804"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=7785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=7785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=7785"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=7785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}