RavenDB com .NET Core

Consumindo dados de um banco NoSQL com .NET Core

Olá pessoal hoje veremos como como acessar dados de um banco de dados NoSQL em uma aplicação .NET Core. Para esse exemplo iremos utilizar o RavenDB.

Bom, mas o que é seria o RavenDB ? Em uma pesquisa rápida na WEB e traduzindo alguns textos, chegamos ao seguinte resumo: “RavenDB é uma base de dados baseada em documentos, onde em vez de guardarmos os nossos dados em linhas e colunas como no SQL Server ou do MySql, nós guardamos o seus dados em um documento JSON”.

Um dos pontos que mais me chamaram atenção, foi ele ter sido desenvolvido em .NET e seu código ser mantido pela comunidade, cenário que hoje está a cada dia se tornando mais normal se tratando de projetos Microsoft. Caso queira se aventurar no seu código fonte, segue o link do GitHub RavenDB e da sua documentação.

Nosso primeiro passo será a instalação do RavenDB, após isso nos iremos criar um projeto .NET Core utilizando o template Web API para realizarmos as nossas primeiras integrações.

Para instalar o RavenDB é bem simples, basta baixar seu executável no link e escolher a versão estável, após isso padrão Windows next next finish, assim que ele finalizar a instalação e configuração, ele irá criar um atalho na sua área de trabalho com o nome RavenDB Studio, basta clicar nela que irá abrir no seu navegador o management do nosso banco. Podemos ver esse primeiro passo na imagem a baixo:

Agora que já estamos com ele instalado, nosso próximo passo será a criação do nosso projeto, nesse post iremos utilizar o template WEB API do .NET Core. Para o post não ficar muito longo, iremos partir de um projeto simples criado com com o template mencionado acima no VS 2017. Com o nosso projeto aberto, agora nós precisamos adicionar a dependência do RevenDB. Para isso, basta clicar com o botão direto em referencias em seguida ir no NuGet e selecionar o pacote conforme a imagem a baixo:

Para quem não esta familiarizado com a estrutura nova do .NET Core, o passo anterior irá adicionar uma nova referência nas dependências do nosso projeto, para verificar se está tudo OK basta expandir Dependências -> Nuget para que possa ver a nossa .dll lá. Podemos ver esse passo na imagem a baixo.

Neste post, nós iremos utilizar os verbos POST, GET, GET By Id, PUT e Delete. Vamos iniciar com a inserção dos dados. Para isso, copie o código a baixo e cole na na sua Controller, para esse artigo nós iremos utilizar a ValuesController que é criada como default em um novo projeto .NET API.

        [HttpPost]
        public ActionResult Post([FromBody]User user)
        {
            if (user == null)
            {
                return NotFound("Sorry !!");
            }
using (var ds = new DocumentStore { Url = "http://localhost:8024/" }.Initialize())
            {
                using (var session = ds.OpenSession("db_home"))
                {
session.Store(user);
                    session.SaveChanges();
                }
            }
return Ok("Congratulations !!");
        }

Vamos entender o nosso método acima, nós estamos criando uma instancia do DocumentStore do RavenDB e passando a Url do nosso server (mesma Url que o atalho abriu no nosso navegador) em seguida inicializamos ele. Após isso nós abrimos uma sessão com a nosso documento db_home, e inserimos os dados no session.Store que irá pegar esse nosso novo usuário e inserir no documento após a chamada SaveChanges().

Agora nós precisamos criar a nossa UserModel. Para isso, crie uma nova pasta chamada Model na sua Solution e dentro dela uma class chamada User e cole o código a baixo dentro dela.

    public class User
    {
        public Guid Id { get; private set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }

Feito isso, nós precisamos enviar um POST para nossa API inserir nosso primeiro registro. Para isso, nós iremos utilizar o Postman um plugin do Google Chrome que nós auxilia nos testes de requisições HTTP. Com o Postman aberto, adicione em Headers Content-Type application/json e cole o código a baixo no corpo da ferramenta:

{  
 "Name": "Thiago",
 "Age": "32"
 }

Agora rode o projeto da nossa API, em seguida envie o Post para que o nosso usuário seja criado.

Vamos agora validar esse passo, vá até o management do RavenDB, note que agora nós temos o nosso primeiro registro sendo listado em nossos documentos. Podemos ver esse resultado na imagem a baixo:

Agora vamos ao nosso método Get, copie o código a baixo e cole na sua Controller.

        [HttpGet]
        public IList Get()
        {
            IList users = new List<User>();
using (var ds = new DocumentStore { Url = "http://localhost:8024/" }.Initialize())
            {
                using (var session = ds.OpenSession("db_home"))
                {
                    users = (from user in session.Query<User>()
                             select user).ToList();
                }
            }
return users;
        }

O código acima é parecido com o do nosso POST, a única diferença é que estamos realizando uma querie e utilizando o Linq para trazer todos os nossos dados, em seguida passamos eles para a nossa variável users. Um ponto interessante aqui é que não precisamos fazer parse e nem um d para, ele já irá identificar os dados e atribuir a nossa Model. A imagem a baixo demonstra o resultado desse passo:

Agora para que possamos buscar o nosso usuário pelo seu Id, basta colocar o código a baixo na sua Controller.

        [HttpGet("{id}")]
        public User Get(Guid id)
        {
            using (var ds = new DocumentStore { Url = "http://localhost:8024/" }.Initialize())
            {
                using (var session = ds.OpenSession("db_home"))
                {
                    return session.Load<User>("users/" + id);
                }
            }
         }

Notem que nós adicionamos um novo código, o session.Load(), com ele nós conseguimos buscar o nosso usuário apenas passando o parâmetro users/ o id dele. Agora para que possamos validar basta chamar no seu navegador a Url do projeto /api/values + a Guid do usuário que nós estamos querendo buscar.

Podemos ver esse resultado na imagem a baixo, note que estamos passando a Guid como parâmetro, em seguida nós adicionamos um break point para que pudéssemos ver o código chegando no nosso método.

Vamos agora atualizar o nosso registro. Para isso, iremos utilizar o método PUT, cole o código a baixo na sua Controller em seguida execute o código para que possamos enviar uma atualização com o Postman.

        [HttpPut("{id}")]
        public void Put(Guid id, [FromBody]User user)
        {
            using (var ds = new DocumentStore { Url = "http://localhost:8024/" }.Initialize())
            {
                using (var session = ds.OpenSession("db_home"))
                {
                    user.Id = id;
                    session.Store(user);
                    session.SaveChanges();
              }
            }
        }

Podemos observar que o método é parecido com o nosso Post, mas como estamos passando o Id do nosso usuário ele irá entender que não é um novo registro e atualizar ao invés de inserir ele. Agora no Postman nós precisamos adicionar no seu body o nosso objeto:

{  
 "Name": "Thiago S Adriano",
 "Age": "32"
}

Feito isso e enviando o nosso objeto ele irá atualizar o nosso registro.

Bom, para que possamos finalizar o nosso artigo, vamos criar o nosso método Delete. Para isso, cole o código a baixo na sua Controller, note que a sintaxe dele é parecida com a do nosso método PUT.

        // DELETE api/values/5
        [HttpDelete("{id}")]
        public void Delete(Guid id)
        {
            using (var ds = new DocumentStore { Url = "http://localhost:8024/" }.Initialize())
            {
                using (var session = ds.OpenSession("db_home"))
                {
                    var user = session.Load<User>("users/" + id);
if (user != null)
                    {
                        session.Delete(user);
                    }
                }
            }
        }

Agora utilizando o Postman novamente e passando o Id do nosso registro, ele irá deletar ele do nosso banco de dados.

Com isso nós conseguimos passar por todos verbos RestFul de uma aplicação Web API do .NET Core integrada com um banco NoSQL. Segue o link do código apresentado nesse artigo no github.

Get Best Software Deals Directly In Your Inbox

Compartilhe:

Share on facebook
Facebook
Share on twitter
Twitter
Share on pinterest
Pinterest
Share on linkedin
LinkedIn

Table of Contents

Postagens Relacionadas

Maze Runner – Correr ou Morrer

Maze Runner – Correr ou Morrer O filme mostra o jovem Thomas (Dylan O’Brien), que vai parar em um lugar desconhecido, sem memória que o
TheWildsVidasSelvagens

the wilds: vidas selvagens

The Wilds: Vidas Selvagens The Wilds: Vidas Selvagens é uma série dramática de TV americana criada por Sarah Streicher que foi lançada no Prime Video
RockBottomRiser

Rock Bottom Riser

Rock Bottom Riser 01/03/2021(US) – Documentário – 1h 10min –   Nota: 0/10   Sinopse     Elenco Nainoa Thompson Como – master navigator Moses
SaferatHome

Safer at Home

Safer at Home 26/02/2021(US) – Filmes – 0h 0min –   Nota: 0/10   Sinopse     Elenco Mais informações Título Original Safer at Home