ASP.NET Core e MongoDB: Implementando uma API com banco de dados NoSQL


Aprenda a como implementar uma API utilizando ASP.NET Core e MongoDB, com o padrão Repository

Em nossas aplicações ASP.NET Core normalmente utilizamos o SQL Server, que é um banco de dados relacional. Porém, uma outra opção vêm se tornando comum para armazenamento dos nossos dados: MongoDB, que é um banco de dados não-relacional (também conhecidos como NoSQL).

Neste artigo vou escrever sobre o MongoDB, e como armazenar dados nele através de uma API com endpoints HTTP GET e POST com o ASP.NET Core.

O exemplo a ser utilizado será de um back-end para criação de eventos, estilo Sympla.

Vamos lá?

Código-fonte aqui.


O que e o MongoDB?

O MongoDB é um banco de dados não-relacional (também conhecido por NoSQL), e baseado em documentos. Explicando o que significam essas características:

  • Banco de dados não-relacional: significa que os dados não são armazenados nos formatos tabulares tradicionais de bancos de dados relacionais (como o SQL Server, por exemplo). Isso resulta em diferentes tipos de bancos de dados, variando em modelos de dados.
  • documentos: é um dos modelos de dados em bancos de dados não-relacionais. É similar ao formato JSON, e é composto por pares de campos e valores. No MongoDB, documentos são armazenados em coleções.

Eu estou executando o MongoDB através de um container Docker. É a maneira mais rápida de começar, e utilizo os comandos abaixo.

Baixando e executando imagem do MongoDB usando Docker

Outras maneiras de instalá-lo podem ser encontradas aqui.


Instalando os pacotes necessarios

O pacote a ser utilizado é o MongoDB.Driver. Ele pode ser baixado via Gerenciador de Pacotes Nuget, ou via linha de comando através do código abaixo.

Instalando o pacote MongoDB.Driver

Esse pacote será suficiente para nosso exemplo. Uma coisa importante de se saber, é que você não precisa criar o banco de dados e a coleção antes de utilizá-los. Se não existirem, eles serão criados quando as operações neles forem ser realizadas.

A seguir, vamos implementar nossa classe de domínio para permitir que seja armazenada em uma coleção do MongoDB.


Implementando classe de domínio

Para mapear a classe para uma estrutura de documento no MongoDB, é necessário realizar os seguintes passos:

  • Criar uma propriedade “Id” na classe;
  • Marcá-la com a anotação “BsonId”, que define a propriedade “Id” como identificador (ou chave primária) do documento.

A classe “Event”, mostrada abaixo,” será utilizada para o exemplo:

Classe a ser utilizada para armazenamento de dados no MongoDB

Implementando os endpoints

Primeiramente, é definida a configuração no arquivo appSettings.json, onde será colocada a string de conexão do banco de dados. 

Configuração no appSettings.json

Essa informação pode ser obtida pela interface IConfiguration, cuja instância da implementação é recebida via injeão de dependência no construtor do EventsController.

Configurando a conexão com o MongoDB

Três classes e métodos aqui são importantes para se entender:

  • MongoClient: classe mais importante, de onde vai se estabelecer a conexão com o servidor MongoDB, através da string de coenxão.
  •  MongoClient.GetDatabase: método utilizado para obter o banco de dados localizado no servidor MongoDB.
  • IMongoDatabase.GetCollection: método utilizado para obter a coleção de dados do tipo T, localizado no banco de dados.

Com isso, as operações já poderão ser executadas sobre os dados do MongoDB.

Segue abaixo a implementação dos métodos HTTP GET e POST do EventsController.

Note que os métodos do IMongoCollection são bem intuitivos. O método Find recebe um Expression<Func<T, bool>>, seguindo a linha dos predicados usados em métodos como o Where e SingleOrDefault do LINQ. Finalmente, o método InsertOne é utilizado para inserir o evento.


Executando

Nesse artigo, eu utilizo a extensão REST Client, do Visual Studio Code. Ela permite realizar chamadas HTTP desde arquivos com extensão .rest, diretamente do editor. Você pode utilizar o Postman também.

Arquivo .rest com chamadas HTTP utilizando o REST Client

Realizo as chamadas na ordem seguinte:

  • POST
  • GET 
  • GET por Id

Utilizo o Robo3T para me conectar ao servidor local do MongoDB.

Dados no servidor MongoDB

Como a imagem abaixo mostra, o banco de dados EventDb foi criado, assim como sua coleção Events. Um registro com os dados passados via API foi criado nele.


Quer alavancar sua carreira como Desenvolvedor(a) .NET?

Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 500 alunos e também tenho dezenas de mentorados.

Conheça o Método .NET Direto ao Ponto, minha plataforma com mais de 600 videoaulas, com cursos cobrindo temas relacionados a linguagem C# e Programação Orientada a Objetos, APIs REST com ASP NET Core, Microsserviços com ASP NET Core, HTML, CSS e JavaScript, Desenvolvimento Front-end com Angular, JavaScript Intermediário, TypeScript, Formação Arquitetura de Software, Microsoft Azure, Agile, SQL, e muito mais.

Inclui comunidade de centenas de alunos, suporte por ela, plataforma e e-mail, atualizações regulares e muito mais.

Clique aqui para ter mais informações e garantir sua vaga


Neste artigo vimos como implementar uma API utilizando ASP.NET Core, com acesso a dados no banco de dados MongoDB. Espero que tenha sido útil!

Até a próxima!

Comments are closed.