{"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\/pt\/asp-net-core-microservices-getting-started\/","title":{"rendered":"Microsservi\u00e7os ASP.NET Core: Primeiros passos"},"content":{"rendered":"<div class=\"paragraph\">\n<p>Microsservi\u00e7os ASP.NET Core: aplicativos que ser\u00e3o respons\u00e1veis por uma \u00fanica fatia \"vertical\" de uma arquitetura geral de aplicativo\/servi\u00e7o.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_why_asp_net_core_microservices\">Por que os microsservi\u00e7os do ASP.NET Core?<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>H\u00e1 muitos <a href=\"https:\/\/microservices.io\/\">opini\u00f5es e recomenda\u00e7\u00f5es<\/a> sobre o que s\u00e3o microsservi\u00e7os, quando usar microsservi\u00e7os em vez de um mon\u00f3lito e muito mais.<\/p>\n<\/div>\n<blockquote class=\"twitter-tweet\" data-width=\"550\" data-dnt=\"true\">\n<p lang=\"en\" dir=\"ltr\">Microsservi\u00e7os <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 julho 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 artigo n\u00e3o abordar\u00e1 essas quest\u00f5es em sua totalidade. Em vez disso, tentaremos apenas <a href=\"https:\/\/chrisrichardson.net\/post\/antipatterns\/2019\/04\/09\/antipattern-flying-before-walking.html\">caminhar antes de voar<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vamos considerar que estamos explorando <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/microservices-architecture-in-couchbase\/\">arquitetura de microsservi\u00e7os<\/a>e queremos aproveitar a persist\u00eancia poliglota para usar um banco de dados NoSQL (Couchbase) para um caso de uso espec\u00edfico. Para o nosso projeto, vamos analisar um <a href=\"https:\/\/microservices.io\/patterns\/data\/database-per-service.html\">Banco de dados por servi\u00e7o<\/a> e usar o Docker (docker-compose) para gerenciar o banco de dados para o ASP.NET Core Microservices <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/proof-of-concept-move-relational\/\">prova de conceito<\/a>.<\/p>\n<\/div>\n<div class=\"sidebarblock\">\n<div class=\"content\">\n<div class=\"paragraph\">\n<p>Os bancos de dados de documentos NoSQL, como o Couchbase, s\u00e3o bons para uma <a href=\"https:\/\/resources.couchbase.com\/sdr\/couchbase-use-cases\">variedade cada vez maior de casos de uso<\/a> incluindo gerenciamento de perfil, gerenciamento de conte\u00fado, personaliza\u00e7\u00e3o e muito mais.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Esta postagem do blog usar\u00e1 o Couchbase Server, mas voc\u00ea tamb\u00e9m pode aplicar os conceitos b\u00e1sicos aqui aos outros bancos de dados em sua arquitetura de microsservi\u00e7os.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Estou usando <strong>ASP.NET Core<\/strong> porque \u00e9 uma estrutura de c\u00f3digo aberto e multiplataforma. Al\u00e9m disso, <a href=\"https:\/\/visualstudio.microsoft.com\/\">Visual Studio<\/a> (embora n\u00e3o seja obrigat\u00f3rio) nos fornecer\u00e1 algumas ferramentas \u00fateis para trabalhar com o Docker e o <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a>. Mas, novamente, voc\u00ea pode aplicar os conceitos b\u00e1sicos aqui a qualquer estrutura da Web ou linguagem de programa\u00e7\u00e3o de sua escolha.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_1_create_a_new_solution\">Etapa 1: Criar uma nova solu\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Usarei o Visual Studio para esta postagem do blog, mas voc\u00ea pode obter o mesmo efeito (talvez com um pouco mais de trabalho) no Visual Studio Code ou na linha de comando antiga.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Crie um novo projeto ASP.NET Core. Chamei o meu de HelloMicroservice (e o <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/126MicroserviceDocker\/src\/HelloMicroservice\">O c\u00f3digo-fonte completo est\u00e1 dispon\u00edvel no GitHub<\/a> para sua refer\u00eancia.<\/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 meu microsservi\u00e7o ASP.NET Core, tamb\u00e9m tomei essas decis\u00f5es no Visual Studio:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Aplicativo Web MVC (gera algum HTML b\u00e1sico para fins de exibi\u00e7\u00e3o, mas voc\u00ea poderia usar um projeto de API com a mesma facilidade)<\/li>\n<li>ASP.NET Core 3 (o ASP.NET Core mais recente no momento em que este artigo foi escrito)<\/li>\n<li>Configurar para HTTPS (n\u00e3o \u00e9 estritamente necess\u00e1rio, mas \u00e9 uma boa ideia)<\/li>\n<li>Habilitar o suporte ao 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>Neste ponto, voc\u00ea deve ter um projeto ASP.NET Core muito b\u00e1sico. Em seguida, adicionaremos alguma orquestra\u00e7\u00e3o e um banco de dados.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_2_add_docker_compose_support\">Etapa 2: Adicionar suporte ao docker-compose<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Clique com o bot\u00e3o direito do mouse no <strong>projeto<\/strong>e clique em \"Add\" (Adicionar) e depois em \"Container Orchestrator Support\" (Suporte ao Orquestrador de Cont\u00eaineres).<\/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>Lembre-se de que o \u00fanico objetivo deste projeto \u00e9 iniciar o desenvolvimento de uma prova de conceito para microsservi\u00e7os ASP.NET Core. \u00c9 mais f\u00e1cil lidar com o Docker-compose do que com o Kubernetes para o desenvolvimento de m\u00e1quinas locais. \u00c9 por isso que estou escolhendo a op\u00e7\u00e3o \"Docker Compose\", mesmo que, eventualmente, eu queira <strong>implanta\u00e7\u00e3o<\/strong> para o 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>Tamb\u00e9m escolhi o Linux, porque \u00e9 nele que espero implantar mais tarde.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Depois de concluir essa etapa, um item \"docker-compose\" ser\u00e1 adicionado \u00e0 sua solu\u00e7\u00e3o.<\/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>Se voc\u00ea der uma olhada no arquivo docker-compose.yml, ver\u00e1 que ele tem <strong>um<\/strong> definido nele: <code>hellomicroservice<\/code>. Observe tamb\u00e9m que o \"Docker Compose\" agora aparece na barra de ferramentas do 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>Nesse ponto, voc\u00ea pode pressionar CTRL+F5 para executar. O Visual Studio usar\u00e1 o Docker Compose para criar uma imagem de seu projeto e execut\u00e1-la no Docker. Seu navegador deve abrir automaticamente e voc\u00ea ver\u00e1 a tela padr\u00e3o de \"Bem-vindo\"<\/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 progredindo. A pr\u00f3xima coisa que precisamos fazer \u00e9 executar um banco de dados com o docker-compose e fazer com que nosso aplicativo ASP.NET Core se comunique com o banco de dados. Quando essas pr\u00f3ximas etapas forem conclu\u00eddas, teremos o shell m\u00ednimo b\u00e1sico do 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\">Etapa 3: Adicionar orquestra\u00e7\u00e3o de banco de dados ao docker-compose<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O Couchbase faz <a href=\"https:\/\/hub.docker.com\/_\/couchbase\">imagens de cont\u00eaineres oficiais dispon\u00edveis no Docker Hub<\/a>. Para usar essas imagens, vamos adicionar outro servi\u00e7o em <code>servi\u00e7os:<\/code> no arquivo 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>Os princ\u00edpios b\u00e1sicos do que voc\u00ea precisa s\u00e3o:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>couchbase:<\/code> Isso inicia uma defini\u00e7\u00e3o de servi\u00e7o chamada \"couchbase\" (voc\u00ea pode dar outro nome, se quiser)<\/li>\n<li><code>imagem: couchbase:enterprise-6.0.3<\/code> A imagem a ser usada para esse servi\u00e7o. \u00c9 sempre uma boa ideia ser expl\u00edcito e usar uma tag como essa, caso contr\u00e1rio, o padr\u00e3o pode ser a imagem \"mais recente\", o que n\u00e3o \u00e9 necessariamente o que voc\u00ea deseja.<\/li>\n<li><code>portos:<\/code> Isso define quais n\u00fameros de porta devem ser expostos <em>externo<\/em> do Docker. Estou expondo apenas 8091, porque esse \u00e9 o n\u00famero da porta da interface do usu\u00e1rio do Couchbase (consulte tamb\u00e9m: <a href=\"https:\/\/docs.couchbase.com\/server\/current\/install\/install-ports.html\">Requisitos de rede e firewall<\/a>)<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>O <code>volumes:<\/code> n\u00e3o \u00e9 estritamente necess\u00e1rio. No entanto, o uso de um volume significa que, mesmo quando a imagem do couchbase parar de ser executada, os arquivos de dados em <code>\/opt\/couchbase\/var<\/code> ser\u00e1 salvo no computador host (o sistema de arquivos do seu computador) e poder\u00e1 ser montado novamente na pr\u00f3xima vez que voc\u00ea executar a imagem. Isso significa que todos os dados que voc\u00ea colocar no couchbase ainda estar\u00e3o l\u00e1 na pr\u00f3xima vez que voc\u00ea executar a imagem.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea pressionar CTRL+F5 para executar o aplicativo, o Docker Compose iniciar\u00e1 a orquestra\u00e7\u00e3o, incluindo <em>ambos<\/em> o servi\u00e7o de atendimento ao cliente <em>e<\/em> a imagem do couchbase. Elas n\u00e3o t\u00eam nada a ver uma com a outra (ainda), a n\u00e3o ser o fato de estarem sendo executadas lado a lado dentro do Docker. Se voc\u00ea abrir uma linha de comando e executar <code>docker ps<\/code>voc\u00ea ver\u00e1 algo parecido com isto:<\/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>(Reduzi bastante o texto acima para que as informa\u00e7\u00f5es relevantes coubessem na largura desta postagem do blog).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_4_configuration_changes\">Etapa 4: Altera\u00e7\u00f5es de configura\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Como usei o estoque <code>couchbase:enterprise-6.0.3<\/code> Imagem do Docker, ainda preciso abrir a interface do usu\u00e1rio do Couchbase (https:\/\/localhost:8091) e configurar o cluster manualmente. Consulte as \"pr\u00f3ximas etapas\" no final para ver algumas op\u00e7\u00f5es de automatiza\u00e7\u00e3o.<\/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>H\u00e1 muitos <a href=\"https:\/\/docs.couchbase.com\/server\/current\/getting-started\/start-here.html\">documenta\u00e7\u00e3o para orient\u00e1-lo nesse processo<\/a>Portanto, n\u00e3o vou repetir isso aqui. Observarei que estou usando as credenciais \"Administrador\" e \"senha\". Tamb\u00e9m usei <a href=\"https:\/\/docs.couchbase.com\/server\/current\/manage\/manage-buckets\/create-bucket.html\">criou um balde<\/a> chamado <strong>hellomicroservice<\/strong>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Depois de criar o bucket, a pr\u00f3xima etapa \u00e9 fazer com que o aplicativo ASP.NET Core se comunique com o banco de dados. Abra o docker-compose.yml e atualize a vari\u00e1vel <code>hellomicroservices:<\/code> defini\u00e7\u00e3o para:<\/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>Vamos detalhar cada uma dessas partes:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><code>ambiente:<\/code> Isso diz ao docker-compose para criar vari\u00e1veis de ambiente.<\/li>\n<li><code>Servidores do Couchbase__0<\/code> O nome de uma vari\u00e1vel de ambiente. A nomenclatura aqui \u00e9 importante. Isso corresponder\u00e1 ao appsettings.json posteriormente.<\/li>\n<li><code>https:\/\/couchbase:8091\/<\/code> A URL de que o ASP.NET Core precisar\u00e1 para se conectar ao servi\u00e7o couchbase. Se voc\u00ea nomeou o servi\u00e7o com algo diferente de \"couchbase\", use esse nome aqui tamb\u00e9m.<\/li>\n<li><code>depende_de<\/code> \u00c9 assim que o docker-compose saber\u00e1 em que ordem iniciar os servi\u00e7os.<\/li>\n<li><code>comando<\/code> Um comando a ser executado quando o servi\u00e7o for iniciado.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Neste exemplo, estou usando <a href=\"https:\/\/github.com\/vishnubob\/wait-for-it\"><code>wait-for-it.sh<\/code><\/a>O script de inicializa\u00e7\u00e3o do Couchbase Server, um script que aguardar\u00e1 a disponibilidade do host\/porta fornecido. Na imagem padr\u00e3o do Docker do Couchbase Server, levar\u00e1 alguns segundos para que o Couchbase Server seja realmente iniciado, portanto, esse script aguardar\u00e1 at\u00e9 que isso aconte\u00e7a para prosseguir.<\/p>\n<\/div>\n<div class=\"sidebarblock\">\n<div class=\"content\">\n<div class=\"paragraph\">\n<p>Usando o wait-for-it <strong>\u00e9 opcional<\/strong>mas quando voc\u00ea est\u00e1 no meio do desenvolvimento, isso pode lhe poupar algumas dores de cabe\u00e7a. (Observe que n\u00e3o inclu\u00ed o wait-for-it.sh no meu arquivo <a href=\"https:\/\/github.com\/couchbaselabs\/blog-source-code\/tree\/master\/Groves\/126MicroserviceDocker\/src\/HelloMicroservice\">exemplo de reposit\u00f3rio do GitHub<\/a>).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Por fim, para fazer com que o projeto ASP.NET Core se comunique com o Couchbase, usei o comando <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/dependency-injection-aspnet-couchbase\/\">Extens\u00e3o de inje\u00e7\u00e3o de depend\u00eancia<\/a> do 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>A configura\u00e7\u00e3o ser\u00e1 extra\u00edda do arquivo appsettings.json por padr\u00e3o. <strong>NO ENTANTO<\/strong>Lembre-se de que uma vari\u00e1vel de ambiente de <code>Servidores do Couchbase__0<\/code> \u00e9 definido em docker-compose.yml. O ASP.NET Core examinar\u00e1 as vari\u00e1veis de ambiente e substituir\u00e1 as configura\u00e7\u00f5es de aplicativos usando esses valores. Portanto, n\u00e3o importa realmente o que <em>valor<\/em> est\u00e1 em appsettings.json (ou appsettings.Development.json) para \"Servers\":<\/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>No entanto, o nome de usu\u00e1rio\/senha ainda s\u00e3o lidos nas configura\u00e7\u00f5es de aplicativos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_step_5_using_the_database\">Etapa 5: Usando o banco de dados<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Por fim, vamos nos certificar de que o aplicativo ASP.NET Core seja capaz de se comunicar com o banco de dados. Eu adicionei um <code>Inserir<\/code> e <code>Obter<\/code> para o <code>HomeController<\/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>Algumas altera\u00e7\u00f5es correspondentes \u00e0 exibi\u00e7\u00e3o em <code>Index.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;Bem-vindo&lt;\/h1&gt;\r\n    &lt;p&gt;Saiba mais sobre &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>Agora, temos os fundamentos do ASP.NET Core Microservices instalados. Pressione CTRL+F5 para executar o servi\u00e7o. Quando o navegador abrir, voc\u00ea ver\u00e1 algo parecido com isto:<\/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>Se, em vez disso, voc\u00ea vir uma mensagem de erro, verifique se configurou o Couchbase Server corretamente, se criou um bucket com o nome correto, se usou as credenciais de login corretas em appsettings.json e se o docker-compose.yml corresponde aos exemplos acima.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Pr\u00f3ximas etapas<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Agora voc\u00ea pode desenvolver seus microsservi\u00e7os ASP.NET Core. Como desenvolvedor, a imagem do Docker do seu aplicativo ASP.NET Core ser\u00e1 sua entrega. Dependendo de onde\/como sua organiza\u00e7\u00e3o planeja implantar, as pr\u00f3ximas etapas variam muito.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso \u00e9 apenas o come\u00e7o, mas aqui est\u00e3o mais algumas coisas que voc\u00ea deve explorar:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Volumes<\/strong>. Feche completamente o Visual Studio. Ap\u00f3s alguns segundos, as imagens do Docker desaparecer\u00e3o (tente <code>docker ps<\/code> novamente para verificar isso). Agora, abra o Visual Studio e pressione CTRL+F5 novamente. Como usamos um volume, os dados que voc\u00ea armazenou no Couchbase ainda devem estar l\u00e1. Se \u00e9 isso que voc\u00ea deseja para o desenvolvimento, est\u00e1 tudo certo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Automa\u00e7\u00e3o<\/strong>. Se preferir que os dados sejam apagados e regenerados todas as vezes, voc\u00ea precisar\u00e1 criar uma imagem personalizada do Docker. Voc\u00ea tamb\u00e9m pode dar uma olhada no excelente <a href=\"https:\/\/github.com\/brantburnett\/couchbasefakeit\">projeto couchbasefakeit<\/a>que inclui v\u00e1rias ferramentas, vari\u00e1veis, scripts, etc., para inicializar o Couchbase Server e preench\u00ea-lo com \u00edndices e dados falsos. Voc\u00ea pode ver um exemplo disso em um <a href=\"https:\/\/gist.github.com\/brantburnett\/2330ebfb3b75a0ceb86be456e0a50f39\">A ideia que Brant Burnett compartilhou comigo<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><strong>Kubernetes<\/strong>. Se voc\u00ea planeja implantar o Couchbase Server (ou mesmo qualquer banco de dados) em cont\u00eaineres, provavelmente vai querer dar uma olhada no Kubernetes e no <a href=\"https:\/\/operatorhub.io\/\">Operadores de Kubernetes<\/a>que facilitam muito o gerenciamento de bancos de dados em clusters do Kubernetes. Muitos fornecedores de bancos de dados criaram operadores Kubernetes, e o Couchbase foi o primeiro fornecedor de NoSQL a lan\u00e7ar um <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/cloud\/kubernetes\/\">Operador aut\u00f4nomo de Kubernetes<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_special_thanks\">Agradecimentos especiais<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Esta postagem do blog n\u00e3o teria sido poss\u00edvel sem a enorme ajuda da Comunidade Couchbase.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Agradecimentos a <a href=\"https:\/\/twitter.com\/btburnett3\">Brant Burnett<\/a> por compartilhar comigo o processo de desenvolvimento de microsservi\u00e7os de sua empresa.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Agrade\u00e7o a Calvin Allen por ter trabalhado nesse processo comigo em minha <a href=\"https:\/\/www.twitch.tv\/matthewdgroves\">Transmiss\u00e3o de codifica\u00e7\u00e3o ao vivo na Twitch<\/a> e para <a href=\"https:\/\/github.com\/CalvinAllen\/docker-playground\">apresentando-me ao 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 v26.0 (Yoast SEO v26.0) - 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\/pt\/asp-net-core-microservices-getting-started\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/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\/pt\/asp-net-core-microservices-getting-started\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-microservices-getting-started\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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":"pt-BR","@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 \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=7785"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7785\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/7804"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=7785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=7785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=7785"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=7785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}