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<T>: 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.


Inscreva-se na lista de espera do Método .NET Direto ao Ponto, um treinamento completo sobre C#, APIs com ASP.NET Core e Microsserviços:  Inscreva-se aqui.

São quase 200 vídeo-aulas sobre temas como C#, ASP NET Core 5, EF Core, CQRS, Clean Architecture, Autenticação e autorização com JWT, Testes Unitários, além de mini-cursos em Microsserviços, Performance em .NET, ASP NET Core e Azure, Docker, Carreira Internacional em .NET, e mais.


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.
%d blogueiros gostam disto: