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:

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações 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ênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixar uma resposta