{"id":12963,"date":"2022-04-04T08:00:22","date_gmt":"2022-04-04T15:00:22","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12963"},"modified":"2025-06-13T20:56:47","modified_gmt":"2025-06-14T03:56:47","slug":"asp-net-core-crud-with-nosql-part-1","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/asp-net-core-crud-with-nosql-part-1\/","title":{"rendered":"CRUD do ASP.NET Core com NoSQL - Parte 1"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Vamos criar um aplicativo ASP.NET Core CRUD com NoSQL.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Criarei uma API HTTP CRUD b\u00e1sica (CRUD \u00e9 Create, Read, Update, Delete). Essa API estar\u00e1 operando em uma lista de desejos de presentes: todos os itens que eu quero que voc\u00ea compre para mim no meu anivers\u00e1rio. N\u00e3o criarei uma interface de usu\u00e1rio, mas voc\u00ea pode usar essa API com a estrutura do lado do cliente de sua escolha (como React ou Blazor, etc.).<\/span><\/p>\n<p><span style=\"font-weight: 400\">Esta primeira postagem incluir\u00e1 toda a configura\u00e7\u00e3o do projeto ASP.NET Core NoSQL e o banco de dados de configura\u00e7\u00e3o. As pr\u00f3ximas postagens criar\u00e3o os pontos de extremidade CRUD reais.<\/span><\/p>\n<h4>Ferramentas de desenvolvedor de que voc\u00ea precisar\u00e1<\/h4>\n<p><span style=\"font-weight: 400\">Estou usando o Visual Studio 2022 (Enterprise), mas voc\u00ea deve ser capaz de acompanhar o processo com o JetBrains Rider, VSCode ou qualquer outro programa que use normalmente. (Se precisar de ajuda, ficarei feliz em ajudar!)<\/span><\/p>\n<p><span style=\"font-weight: 400\">Tamb\u00e9m estou usando <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">Couchbase Capella<\/span><\/a><span style=\"font-weight: 400\">que \u00e9 a oferta de DBaaS (banco de dados como servi\u00e7o) do Couchbase.<\/span><\/p>\n<p><span style=\"font-weight: 400\">J\u00e1 me inscrevi em uma conta de avalia\u00e7\u00e3o. Voc\u00ea tamb\u00e9m pode, v\u00e1 para: <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">https:\/\/cloud.couchbase.com\/sign-up<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400\">O <\/span><em>amostra de viagem<\/em><span style=\"font-weight: 400\"> j\u00e1 est\u00e1 carregado quando voc\u00ea implanta o cluster de avalia\u00e7\u00e3o. Mas estou usando o <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/data-service\/manage-buckets.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">outro balde que criei<\/span><\/a><span style=\"font-weight: 400\"> chamado <em>demonstra\u00e7\u00e3o<\/em>.<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13501-capella-buckets.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12965\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13501-capella-buckets.png\" alt=\"Configure Couchbase buckets on Capella DBaaS\" width=\"744\" height=\"505\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13501-capella-buckets.png 744w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13501-capella-buckets-300x204.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13501-capella-buckets-235x160.png 235w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13501-capella-buckets-20x14.png 20w\" sizes=\"auto, (max-width: 744px) 100vw, 744px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Dentro desse balde, h\u00e1 um <\/span><i><span style=\"font-weight: 400\">Padr\u00e3o<\/span><\/i><span style=\"font-weight: 400\"> portanto, vou us\u00e1-lo. E dentro desse escopo, criei um <\/span><i><span style=\"font-weight: 400\">Lista de desejos<\/span><\/i><span style=\"font-weight: 400\">\u00a0cole\u00e7\u00e3o. (<\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/data-service\/scopes-collections.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">Saiba mais sobre escopos e cole\u00e7\u00f5es no Capella<\/span><\/a><span style=\"font-weight: 400\">)<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13502-wishlist-collection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12966\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13502-wishlist-collection.png\" alt=\"Configure Couchbase Collections on Capella DBaaS\" width=\"741\" height=\"501\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13502-wishlist-collection.png 741w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13502-wishlist-collection-300x203.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13502-wishlist-collection-235x160.png 235w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13502-wishlist-collection-20x14.png 20w\" sizes=\"auto, (max-width: 741px) 100vw, 741px\" \/><\/a><\/p>\n<h4>Credenciais CRUD<\/h4>\n<p><span style=\"font-weight: 400\">Voc\u00ea tamb\u00e9m precisar\u00e1 <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/manage-database-users.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">criar credenciais de banco de dados<\/span><\/a><span style=\"font-weight: 400\"> com acesso de leitura\/grava\u00e7\u00e3o a tudo no <\/span><i><span style=\"font-weight: 400\">demonstra\u00e7\u00e3o<\/span><\/i><span style=\"font-weight: 400\">\u00a0balde.<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13503-create-credentials.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12967\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13503-create-credentials.png\" alt=\"Configure Couchbase credentials on Capella DBaaS\" width=\"685\" height=\"817\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13503-create-credentials.png 685w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13503-create-credentials-252x300.png 252w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13503-create-credentials-300x358.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13503-create-credentials-17x20.png 17w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Finalmente, <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/allow-ip-address.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">colocar o endere\u00e7o IP na lista de permiss\u00f5es<\/span><\/a><span style=\"font-weight: 400\"> a partir do qual voc\u00ea compilar\u00e1 e executar\u00e1 seu aplicativo, para que possa se conectar.<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13504-whitelist-ip-capella.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12968\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13504-whitelist-ip-capella.png\" alt=\"Configure Couchbase IP whitelist on Capella DBaaS\" width=\"741\" height=\"413\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13504-whitelist-ip-capella.png 741w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13504-whitelist-ip-capella-300x167.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13504-whitelist-ip-capella-20x11.png 20w\" sizes=\"auto, (max-width: 741px) 100vw, 741px\" \/><\/a><\/p>\n<h4>Iniciar um aplicativo ASP.NET Core<\/h4>\n<p><span style=\"font-weight: 400\">No Visual Studio, selecione <\/span><b>File\u2192New \u2192Project\u2192ASP.NET Core Web API<\/b><span style=\"font-weight: 400\">. Eu o chamei de <\/span><i><span style=\"font-weight: 400\">Tutorial do AspNetCore<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13506-visual-studio-new-web-api.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12969\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13506-visual-studio-new-web-api.png\" alt=\"Setting up a ASP.NET project\" width=\"973\" height=\"639\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13506-visual-studio-new-web-api.png 973w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13506-visual-studio-new-web-api-300x197.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13506-visual-studio-new-web-api-768x504.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13506-visual-studio-new-web-api-20x13.png 20w\" sizes=\"auto, (max-width: 973px) 100vw, 973px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Estou usando o .NET 6 e todos os outros padr\u00f5es est\u00e3o corretos (observe que o OpenAPI, tamb\u00e9m conhecido como Swagger, est\u00e1 ativado).<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13507-visual-studio-web-api-information.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12970\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13507-visual-studio-web-api-information.png\" alt=\"Default settings in a ASP.NET project\" width=\"694\" height=\"441\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13507-visual-studio-web-api-information.png 694w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13507-visual-studio-web-api-information-300x191.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13507-visual-studio-web-api-information-20x13.png 20w\" sizes=\"auto, (max-width: 694px) 100vw, 694px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Esse processo cria um site shell b\u00e1sico.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Em seguida, vamos usar o NuGet para adicionar o Couchbase .NET SDK (<\/span><i><span style=\"font-weight: 400\">CouchbaseNetClient<\/span><\/i><span style=\"font-weight: 400\">).<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13508-nuget-couchbase.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12971\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13508-nuget-couchbase.png\" alt=\"Couchbase .NET SDK nuget\" width=\"655\" height=\"210\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13508-nuget-couchbase.png 655w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13508-nuget-couchbase-300x96.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13508-nuget-couchbase-20x6.png 20w\" sizes=\"auto, (max-width: 655px) 100vw, 655px\" \/><\/a><\/p>\n<h5><b>Notas sobre o SDK do .NET<\/b><\/h5>\n<p><span style=\"font-weight: 400\">O SDK do Couchbase .NET permite que nos conectemos a um cluster do Couchbase. O Couchbase \u00e9 um banco de dados distribu\u00eddo, portanto, normalmente, h\u00e1 v\u00e1rios servidores (chamados de \"n\u00f3s\") em um grupo (chamado de \"cluster\") que atuam juntos. Um cluster tem um ou mais \"buckets\", que, como voc\u00ea viu anteriormente, cont\u00e9m escopos, que cont\u00eam cole\u00e7\u00f5es, que, por sua vez, cont\u00eam documentos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os dados em um bucket s\u00e3o distribu\u00eddos entre os n\u00f3s do cluster, mas s\u00e3o tratados como uma \u00fanica entidade l\u00f3gica pelo SDK.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Em uma cole\u00e7\u00e3o, cada <\/span><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/data-service\/manage-documents.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">documento<\/span><\/a><span style=\"font-weight: 400\"> tem uma \"chave\" exclusiva e um \"valor\" JSON.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Na vers\u00e3o de teste do Capella, haver\u00e1 apenas um \u00fanico n\u00f3. No entanto, isso n\u00e3o afeta seu c\u00f3digo: quando os n\u00f3s s\u00e3o adicionados, o SDK \u00e9 inteligente o suficiente para encontr\u00e1-los por conta pr\u00f3pria.<\/span><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/sizing.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">Na produ\u00e7\u00e3o, voc\u00ea normalmente ter\u00e1 pelo menos tr\u00eas n\u00f3s<\/span><\/a><span style=\"font-weight: 400\">possivelmente alguns buckets e quantos escopos e cole\u00e7\u00f5es forem necess\u00e1rios (dentro do razo\u00e1vel).<\/span><\/p>\n<h4>Inje\u00e7\u00e3o de depend\u00eancia<\/h4>\n<p><span style=\"font-weight: 400\">Tamb\u00e9m vou adicionar o <\/span><i><span style=\"font-weight: 400\">Couchbase.Extensions.DependencyInjection<\/span><\/i><span style=\"font-weight: 400\"> pacote NuGet. Isso fornecer\u00e1 m\u00e9todos de extens\u00e3o para adicionar facilmente os recursos do Couchbase \u00e0 inje\u00e7\u00e3o de depend\u00eancia integrada do ASP.NET Core.<\/span><\/p>\n<p><span style=\"font-weight: 400\">(Esse pacote facilita o uso do Couchbase com o ASP.NET Core, mas \u00e9 opcional).<\/span><\/p>\n<h4>Conectar o ASP.NET Core ao Couchbase Capella<\/h4>\n<p><span style=\"font-weight: 400\">Vamos escrever algum c\u00f3digo no aplicativo ASP.NET para nos conectarmos ao cluster do Capella.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Em <\/span><i><span style=\"font-weight: 400\">Program.cs<\/span><\/i><span style=\"font-weight: 400\">Use o m\u00e9todo de extens\u00e3o nos servi\u00e7os:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:c# decode:true\">builder.Services.AddCouchbase(x =&gt;\r\n{\r\n\u00a0 \u00a0 x.ConnectionString = \"couchbases:\/\/\" + \"&lt;&lt; Capella connection string &gt;&gt;\";\r\n\u00a0 \u00a0 x.UserName = \"svc-wishlist\";\r\n\u00a0 \u00a0 x.Password = \"TOP-secret-123!\";\r\n\u00a0 \u00a0 x.HttpIgnoreRemoteCertificateMismatch = true;\r\n\u00a0 \u00a0 x.KvIgnoreRemoteCertificateNameMismatch = true;\r\n});<\/pre>\n<p><span style=\"font-weight: 400\">(Neste exemplo, estou codificando as informa\u00e7\u00f5es de conex\u00e3o, mas voc\u00ea tamb\u00e9m pode usar a configura\u00e7\u00e3o em <\/span><i><span style=\"font-weight: 400\">Configura\u00e7\u00f5es do aplicativo.json<\/span><\/i><span style=\"font-weight: 400\"> em vez disso).<\/span><\/p>\n<p><span style=\"font-weight: 400\">Mais uma etapa: quando o aplicativo for interrompido, preciso que ele libere todos os recursos do Couchbase que o .NET estiver usando.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Voc\u00ea pode registrar o c\u00f3digo a ser executado em eventos de tempo de vida, como <\/span><i><span style=\"font-weight: 400\">ApplicationStopped<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:c# decode:true\">app.Lifetime.ApplicationStopped.Register(() =&gt;\r\n{\r\n  app.Services.GetService&lt;ICouchbaseLifetimeService&gt;()?.Close();\r\n});<\/pre>\n<p><span style=\"font-weight: 400\">Agora, o sistema de inje\u00e7\u00e3o de depend\u00eancia do ASP.NET Core injetar\u00e1 automaticamente os objetos do Couchbase quando quisermos.<\/span><\/p>\n<h4>Modelagem de dados<\/h4>\n<p><span style=\"font-weight: 400\">Antes de escrevermos mais c\u00f3digo, vamos pensar no modelo de dados. Ser\u00e1 um modelo muito simples: apenas o nome de um item para a lista de desejos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Em um banco de dados de documentos NoSQL, cada parte dos dados tem uma chave e um valor JSON. A chave pode ser apenas um GUID para nossos prop\u00f3sitos (voc\u00ea tamb\u00e9m pode criar uma chave mais significativa, se quiser). Cada item da lista de desejos tem um \"<\/span><span style=\"font-weight: 400\">nome<\/span><span style=\"font-weight: 400\">\", portanto, haver\u00e1 um <em>nome<\/em> campo.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Criarei uma classe C# para representar um item:<\/span><\/p>\n<pre class=\"decode-attributes:false lang:c# decode:true\">public class WishlistItem\r\n{\r\n\u00a0 \u00a0 public Guid? Id { get; set; }\r\n\u00a0 \u00a0 public string Name { get; set; }\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">Um modelo realmente simples, mas como o Couchbase n\u00e3o exige um esquema predefinido, adicionar mais campos pode ser t\u00e3o f\u00e1cil quanto adicion\u00e1-los aqui mesmo na classe C#.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Vamos \"preparar\" o banco de dados com alguns itens da lista de desejos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Navegue at\u00e9 a cole\u00e7\u00e3o da lista de desejos no Couchbase Capella e adicione alguns documentos.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O primeiro documento ter\u00e1 uma chave \"<\/span><i><span style=\"font-weight: 400\">3ca6e87e-c3a6-4637-989d-33cbca5002b5<\/span><\/i><span style=\"font-weight: 400\">\", e darei a ele o nome de \"<\/span><i><span style=\"font-weight: 400\">Camiseta Skyline Chili<\/span><\/i><span style=\"font-weight: 400\">&#8220;. <\/span><\/p>\n<p><span style=\"font-weight: 400\">O segundo documento ter\u00e1 uma chave \"<\/span><i><span style=\"font-weight: 400\">31c9cc33-8dfe-440c-bd1b-bb038939d2e0<\/span><\/i><span style=\"font-weight: 400\">\", darei a ele o nome de \"<\/span><i><span style=\"font-weight: 400\">Joey Votto Jersey<\/span><\/i><span style=\"font-weight: 400\">&#8220;.<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13509-json-documents-capella.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-12972\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/03\/13509-json-documents-capella.png\" alt=\"Viewing Couchbase documents added to bucket\" width=\"739\" height=\"531\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13509-json-documents-capella.png 739w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13509-json-documents-capella-300x216.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/03\/13509-json-documents-capella-20x14.png 20w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400\">Voc\u00ea pode adicionar outros documentos, se desejar, mas, no final, criaremos um aplicativo em que os documentos ser\u00e3o adicionados\/alterados por meio do aplicativo ASP.NET Core.<\/span><\/p>\n<h4>Controlador para a\u00e7\u00f5es CRUD NoSQL<\/h4>\n<p><span style=\"font-weight: 400\">Em seguida, crie um controlador ASP.NET para minhas opera\u00e7\u00f5es CRUD. Eu o chamo de <\/span><i><span style=\"font-weight: 400\">GiftsController<\/span><\/i><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">No construtor, especifique um <\/span><i><span style=\"font-weight: 400\">IBucketProvider<\/span><\/i><span style=\"font-weight: 400\"> par\u00e2metro. Esse \u00e9 um objeto que pode ser usado para obter um Bucket do Couchbase <\/span><i><span style=\"font-weight: 400\">Inje\u00e7\u00e3o de depend\u00eancia<\/span><\/i><span style=\"font-weight: 400\"> m\u00f3dulo. Eu o usarei para obter um <\/span><i><span style=\"font-weight: 400\">Balde<\/span><\/i><span style=\"font-weight: 400\"> para o objeto <\/span><i><span style=\"font-weight: 400\">demonstra\u00e7\u00e3o<\/span><\/i><span style=\"font-weight: 400\">\u00a0balde.<\/span><\/p>\n<pre class=\"decode-attributes:false lang:c# decode:true\">public class GiftsController : Controller\r\n{\r\n\u00a0 \u00a0 private readonly IBucketProvider _bucketProvider;\r\n\r\n\u00a0 \u00a0 public GiftsController(IBucketProvider bucketProvider)\r\n\u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 _bucketProvider = bucketProvider;\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 \/\/ ...\r\n}<\/pre>\n<p><span style=\"font-weight: 400\">Voc\u00ea pode executar o aplicativo neste momento, apenas para verificar se a conex\u00e3o funciona. Ainda n\u00e3o haver\u00e1 nenhum ponto de extremidade (exceto o <\/span><i><span style=\"font-weight: 400\">Previs\u00e3o do tempo<\/span><\/i><span style=\"font-weight: 400\"> exemplo que a Microsoft colocou como exemplo).<\/span><\/p>\n<h4>O que vem a seguir?<\/h4>\n<p><span style=\"font-weight: 400\">Agora temos um projeto ASP.NET Core, conectado ao Couchbase Capella. Na pr\u00f3xima postagem do blog, abordaremos a cria\u00e7\u00e3o dos endpoints CRUD reais.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Enquanto isso, voc\u00ea pode:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/cloud.couchbase.com\/sign-up\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">Inscreva-se para um teste gratuito do Capella<\/span><\/a><\/li>\n<li><span style=\"font-weight: 400\">Confira o <\/span><a href=\"https:\/\/cloud.couchbase.com\/sign-up\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">Couchbase Playground para .NET<\/span><\/a><span style=\"font-weight: 400\"> exemplos que voc\u00ea pode executar diretamente no navegador.<\/span><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Let\u2019s build an ASP.NET Core CRUD with NoSQL application. I\u2019ll be creating a basic CRUD HTTP API (CRUD is Create, Read, Update, Delete). This API will be operating on a gift wishlist: all the items I want you to buy [&hellip;]<\/p>","protected":false},"author":71,"featured_media":12986,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1811,10126,10127,2225,2201],"tags":[9549,2821],"ppma_author":[8937],"class_list":["post-12963","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-asp-dotnet","category-c-sharp","category-cloud","category-tools-sdks","tag-crud","tag-dbaas"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ASP.NET Core CRUD with NoSQL Database [Part 1] | Couchbase<\/title>\n<meta name=\"description\" content=\"Need to know how to build an ASP.NET Core CRUD with NoSQL application? This Couchbase blot post will include all the project setup and configuration.\" \/>\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-crud-with-nosql-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ASP.NET Core CRUD with NoSQL - Part 1\" \/>\n<meta property=\"og:description\" content=\"Need to know how to build an ASP.NET Core CRUD with NoSQL application? This Couchbase blot post will include all the project setup and configuration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/asp-net-core-crud-with-nosql-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-04-04T15:00:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:56:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"6 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-crud-with-nosql-part-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"ASP.NET Core CRUD with NoSQL &#8211; Part 1\",\"datePublished\":\"2022-04-04T15:00:22+00:00\",\"dateModified\":\"2025-06-14T03:56:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/\"},\"wordCount\":1021,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg\",\"keywords\":[\"CRUD\",\"dbaas\"],\"articleSection\":[\".NET\",\"ASP.NET\",\"C#\",\"Couchbase Capella\",\"Tools &amp; SDKs\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/\",\"name\":\"ASP.NET Core CRUD with NoSQL Database [Part 1] | Couchbase\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg\",\"datePublished\":\"2022-04-04T15:00:22+00:00\",\"dateModified\":\"2025-06-14T03:56:47+00:00\",\"description\":\"Need to know how to build an ASP.NET Core CRUD with NoSQL application? This Couchbase blot post will include all the project setup and configuration.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ASP.NET Core CRUD with NoSQL &#8211; Part 1\"}]},{\"@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 CRUD with NoSQL Database [Part 1] | Couchbase","description":"Precisa saber como criar um aplicativo ASP.NET Core CRUD com NoSQL? Esta postagem do Couchbase blot incluir\u00e1 toda a instala\u00e7\u00e3o e configura\u00e7\u00e3o do projeto.","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-crud-with-nosql-part-1\/","og_locale":"pt_BR","og_type":"article","og_title":"ASP.NET Core CRUD with NoSQL - Part 1","og_description":"Need to know how to build an ASP.NET Core CRUD with NoSQL application? This Couchbase blot post will include all the project setup and configuration.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/asp-net-core-crud-with-nosql-part-1\/","og_site_name":"The Couchbase Blog","article_published_time":"2022-04-04T15:00:22+00:00","article_modified_time":"2025-06-14T03:56:47+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"ASP.NET Core CRUD with NoSQL &#8211; Part 1","datePublished":"2022-04-04T15:00:22+00:00","dateModified":"2025-06-14T03:56:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/"},"wordCount":1021,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg","keywords":["CRUD","dbaas"],"articleSection":[".NET","ASP.NET","C#","Couchbase Capella","Tools &amp; SDKs"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/","url":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/","name":"ASP.NET Core CRUD with NoSQL Database [Part 1] | Couchbase","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg","datePublished":"2022-04-04T15:00:22+00:00","dateModified":"2025-06-14T03:56:47+00:00","description":"Precisa saber como criar um aplicativo ASP.NET Core CRUD com NoSQL? Esta postagem do Couchbase blot incluir\u00e1 toda a instala\u00e7\u00e3o e configura\u00e7\u00e3o do projeto.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/04\/shutterstock_1518548357-scaled.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/asp-net-core-crud-with-nosql-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ASP.NET Core CRUD with NoSQL &#8211; Part 1"}]},{"@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\/12963","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=12963"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/12963\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/12986"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=12963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=12963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=12963"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=12963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}