.NET

CRUD do ASP.NET Core com NoSQL: Parte 4

Os aplicativos ASP.NET CRUD incluem a interação com dados que consistem em criar, ler, atualizar e excluir. Em Parte 1Em seguida, configuramos um projeto básico do ASP.NET Core. Em Parte 2adicionamos o primeiro ler usando uma consulta SQL++ em relação aos dados da lista de desejos. Em Parte 3Adicionamos outro ponto de extremidade de leitura, desta vez usando a API de valor-chave.

Até este ponto, as únicas modificações de dados que fizemos foram diretamente na interface do usuário do Couchbase Capella. Nesta postagem, vamos adicionar um endpoint para lidar com a criação e a atualização dos dados da lista de desejos.

SQL++ versus valor-chave: Revisitado

O SQL++ inclui INSERIR, ATUALIZAÇÃO, DELETE sintaxe. Portanto, poderíamos usar o SQL++ para criar um ponto de extremidade para alterar dados. Ele seria muito semelhante ao código escrito em Parte 2.

Uma palavra-chave no SQL++ que você talvez não tenha visto antes é UPSERT. Como você pode imaginar, é uma combinação de ATUALIZAÇÃO e INSERIR. Uma atualização ocorrerá se os dados já existirem; uma inserção ocorrerá se não existirem. Veja como pode ser um endpoint upsert usando SQL++:

Há dois aspectos importantes a serem destacados sobre esse código:

    • Ele lida tanto com a criação quanto com a atualização. Se item tiver um ID nulo, esse código pressupõe que um novo item da lista de desejos está sendo criado.
    • Parametrização: assim como nos bancos de dados relacionais, o SQL++ pode ser vulnerável a Injeção de SQLportanto, a parametrização é altamente recomendada. Observe que a sintaxe do SQL++ usa $ para indicar parâmetros nomeados (por exemplo $id e $name).

Esse endpoint funcionará. Mas, como foi o caso em Parte 3Se o Couchbase for um banco de dados, não precisaremos usar o SQL++ para interagir com o Couchbase. De fato, critérios muito semelhantes se aplicam à decisão de quando usar valor-chave e quando usar SQL++:

Caso de uso Chave-valor? Por que ou por que não?
Criar um novo usuário com a chave "73892" Sim Acesso direto
Modificar um usuário com a chave "73892" Sim Acesso direto
Modificar apenas o endereço de e-mail de um usuário com a chave "73892" Sim Mesmo que o documento do usuário seja grande, o Couchbase tem um recurso baseado em chave API de subdocumentoque permite que você modifique uma parte do documento.
Modificar um grupo de usuários com as chaves "73892", "47212" e "90491" Sim Isso pode exigir várias operações de valor-chave, mas ainda assim pode ser mais rápido do que usar um SQL SELECT ... WHERE ... IN consulta.
Modificar todos os endereços para usar "OH" em vez de "Ohio" Não O estado do usuário é provavelmente um atributo "secundário", não uma chave (vários usuários podem ser de Ohio). Esse é um bom caso de uso para um SQL++ ATUALIZAÇÃO

Como esse endpoint só precisa adicionar ou alterar um único item da lista de desejos, vamos usar a API de valor-chave.

Escreva um ponto de extremidade CRUD CreateOrEdit

Antes de começarmos a codificar, é aconselhável pensar se CriarOuEditar deve ser um único ponto de extremidade ou dividido em um Criar e um ponto de extremidade Editar endpoint. Para esse aplicativo de lista de desejos muito simples, não há validação, autenticação ou outras preocupações transversais a todo o sistema. No entanto, em um sistema de produção, "adicionar" dados e "atualizar" dados podem muito bem seguir regras comerciais diferentes e exigir permissões diferentes. Nesse caso, talvez você queira dividir as operações em dois endpoints.

Por enquanto, vamos começar com um único ponto de extremidade que usa um "upsert":

Assim como o ponto de extremidade do SQL++, esse ponto de extremidade examina Id para determinar se isso é uma "criação" ou uma "atualização".

O UpsertAsync A função irá:

    • Criar um novo documento com id.ToString() como a chave
    • Modificar um documento existente com uma chave de id.ToString()

Em ambos os casos, quando esse endpoint terminar de ser executado, você terá um documento JSON como { "name" = "nome do item da lista de desejos"} e um GUID como chave (tecnicamente, todas as chaves no Couchbase são strings, mas sabemos que se trata de uma string GUID).

Observação: Uma diferença sutil entre as duas APIs é que o UPSERT só alterará o único campo (nome), enquanto o método de valor-chave UpsertAsync alterará o documento inteiro (que é apenas nome por enquanto).

ASP.NET CRUD em ação

Inicie seu aplicativo no Visual Studio com CTRL+F5, e você verá alguns novos pontos de extremidade aparecerem na interface do usuário do OpenAPI/Swagger:

ASP.NET endpoints showing in Swagger UI

Do ponto de vista de um consumidor de API, ambos /api/edit e /api/editWithSql funcionarão da mesma forma. Experimente uma vez deixando a ID em branco para criar um novo item e, em seguida, tente novamente com uma ID conhecida (use /api/getall se você precisar obter uma identificação) e observe o que acontece e o que muda.

Por exemplo, adicionei um novo item "Digital Photo Frame", deixando o ID em branco (meu código .NET gerou "1c3de2e7-70ea-4ee2-803b-425bbf6251cb" para mim), e atualizei o item com o ID de "2dab198b-1836-4409-9bdf-17275a2b2462" para ter o nome de "Skyline Chili 2XL T-Shirt". Aqui estão os resultados, conforme vistos na interface do usuário do Couchbase Capella:

Couchbase Capella UI showing ASP.NET project documents

O que vem a seguir?

O projeto ASP.NET Core está conectado ao Couchbase Capella e agora está criando/atualizando ("upserting") dados com valor-chave (recomendado) ou SQL++ (não recomendado para essa situação específica).

Na próxima postagem do blog, completaremos o CRUD com "D" de "delete".

Nesse meio tempo, você deve:

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Author

Posted by Matthew Groves

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.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.