EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
C#chevron-right

Create a RESTful API With .NET Core and MongoDB

Nic Raboy8 min read • Published Feb 08, 2022 • Updated Sep 11, 2024
.NETMongoDBC#
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
{Se você tem acompanhado meu conteúdo de desenvolvimento, deve se lembrar que recentemente escrevi Construa seu primeiro aplicativo .NET Core com o MongoDB Atlas, que se concentrou na criação de um aplicativo de console integrado ao MongoDB. Embora o MongoDB seja adequado para aplicativos de console, muitos desenvolvedores o acharão mais valioso em aplicativos web.
Neste tutorial, vamos expandir o anterior e criar uma API RESTful com endpoints que executam operações básicas de criação, leitura, atualização e exclusão (CRUD) no MongoDB Atlas.

Os requisitos

Para que este tutorial cumpra sua finalidade, você precisa resolver alguns detalhes primeiro:
  • Um cluster do MongoDB Atlas implantado e configurado, M0 ou superior
  • .NET Core 6+
Não passaremos pelas etapas de implantação de um MongoDB Atlas cluster ou de configuração com regras de usuário e rede. Se você precisar de ajuda com isso, confira um tutorial anterior que foi publicado sobre o tópico.
Usaremos o .NET Core 6.0 neste tutorial, mas outras versões ainda podem funcionar. Apenas leve a versão em consideração antes de continuar.

Crie um projeto de API Web com a CLI do .NET Core

Para começar, vamos criar um novo projeto do .NET Core usando o modelo de aplicativo web que a Microsoft oferece. Para fazer isso, execute os seguintes comandos da CLI:
Os comandos acima criam um novo projeto de aplicativo da web para o .NET Core e instalam o driver do MongoDB mais recente. Ficaremos com alguns arquivos boilerplate como parte do modelo, mas podemos removê-los.
Dentro do projeto, exclua todos os arquivos relacionados a WeatherForecast e similares.

Projetando um document model e um serviço de banco de dados no .NET Core

Antes de começarmos a projetar cada um dos endpoints da API RESTful com o .NET Core, precisamos criar e configurar nosso serviço MongoDB e definir o modelo de dados para nossa API.
Começaremos trabalhando em nosso serviço MongoDB, que será responsável por estabelecer nossa conexão e trabalhar diretamente com documentos dentro do MongoDB. Dentro do projeto, crie "Models/MongoDBSettings.cs" e adicione o seguinte código C#:
A classe MongoDBSettings acima contém informações sobre nossa conexão, o nome do banco de dados e o nome da coleção. Os dados que planejamos armazenar nesses campos de classe são encontrados no arquivo "appsettings.json" do projeto. Abra-o e adicione o seguinte:
Anote especificamente o campo MongoDB. Assim como no projeto de exemplo anterior, usaremos o banco de dados "sample_mflix" e a coleção "playlist". Você precisará pegar a stringConnectionURI do seu dashboard do MongoDB Atlas.
String de conexão do MongoDB Atlas
String de conexão do MongoDB Atlas
Com as configurações definidas, podemos passar para a criação do serviço.
Crie "Services/MongoDBService.cs" dentro do seu projeto e adicione o seguinte:
No código acima, cada uma das funções assíncronas foi deixada em branco de propósito. Preencheremos essas funções à medida que criarmos nossos pontos de extremidade. Em vez disso, anote o método do construtor e como estamos pegando as configurações passadas que vimos em nosso arquivo "appsettings.json" e definindo-as como variáveis. No final, a única variável com a qual interagiremos para este exemplo é a variável _playlistCollection.
Com o serviço disponível, precisamos conectá-lo ao aplicativo. Abra o "Program.cs" do arquivo do projeto e adicione o seguinte no topo:
É provável que você já tenha a variável builder em seu código porque ela fazia parte do projeto padrão, portanto, não a adicione duas vezes. O que você precisará adicionar próximo ao topo é uma importação para seus modelos e serviços personalizados, bem como a configuração do serviço.
Lembra do campo MongoDB no arquivo "appsettings.json"? Essa é a seção da qual a função GetSection está extraindo. Essas informações são passadas para o serviço singleton que criamos.
Com o serviço criado e funcionando, com exceção das funções assíncronas incompletas, podemos nos concentrar na criação de um modelo de dados para a nossa coleção.
Crie "Models/playlist.cs" e adicione o seguinte código C#:
Há algumas coisas acontecendo na classe acima que a transformam de uma classe C# padrão em algo que pode se integrar perfeitamente a um documento MongoDB.
Primeiro, você pode observar o seguinte:
Estamos dizendo que o campo Id deve ser representado como um ObjectId no BSON e o campo _id no MongoDB. No entanto, quando trabalharmos com ele localmente em nosso aplicativo, ele será uma string.
A próxima coisa que você notará é o seguinte:
Embora planejemos trabalhar com movieIds em nosso aplicativo C#, no MongoDB, o campo será conhecido como items e, ao enviar ou receber JSON, o campo também será conhecido como items em vez de movieIds.
Não é necessário definir mapeamentos personalizados se você planeja que o campo de classe local corresponda diretamente ao campo do documento. Veja o campo usernameem nosso exemplo. Ele não tem mapeamentos personalizados, portanto seráusername em C#, username em JSON e username em MongoDB.
Assim, temos um serviço do MongoDB e um document model para nossa coleção para trabalhar com o .NET Core.

Construindo endpoints CRUD que interagem com MongoDB usando .NET Core

Ao criar pontos de extremidade CRUD para este projeto, precisaremos alternar entre dois locais diferentes dentro do nosso projeto. Precisaremos definir o ponto de extremidade em um controlador e fazer o trabalho em nosso serviço.
Crie "Controllers/PlaylistController.cs" e adicione o seguinte código:
Na classe PlaylistController acima, temos um método construtor que obtém acesso à nossa classe de serviço singleton. Então temos uma série de endpoints para este controlador específico. Poderíamos adicionar muito mais endpoints ao nosso controlador, mas isso não é necessário para este exemplo.
Vamos começar criando dados por meio do ponto de extremidade POST. Para fazer isso, é melhor começar no arquivo "Services/MongoDBService.cs" :
Definimos o _playlistCollection no método construtor do serviço, portanto, agora podemos usar o método InsertOneAsync, pegando uma variável Playlist passada e inserindo-a. Voltando ao site "Controllers/PlaylistController.cs,", podemos adicionar o seguinte:
O que estamos dizendo é que, quando o ponto de extremidade é executado, pegamos o objeto Playlist da solicitação, algo que o .NET Core analisa para nós, e o passamos para a função CreateAsync que vimos no serviço. Após a inserção, retornamos algumas informações sobre a interação.
É importante observar que, neste projeto de exemplo, não validaremos nenhum dado que flua de solicitações HTTP.
Vamos passar às operações de leitura.
Volte para o arquivo "Services/MongoDBService.cs" e adicione a seguinte função:
A operação Find acima retornará todos os documento existentes na coleção. Se quiser, você pode usar FindOne ou fornecer critérios de filtro para retornar somente os dados desejados. Exploraremos os filtros em breve.
Com a função de serviço pronta, adicione o seguinte endpoint ao "Controllers/PlaylistController.cs" arquivo:
Nada mal, né? Faremos o mais ou menos o mesmo com os outros endpoints.
O próximo estágio do CRUD é a atualização dos dados. No arquivo "Services/MongoDBService.cs" , adicione a seguinte função:
Em vez de fazer alterações em todo o documento, estamos planejando adicionar um item à nossa lista de reprodução e nada mais. Para fazer isso, configuramos um filtro de correspondência para determinar qual documento ou documentos devem receber a atualização. Nesse caso, estamos fazendo a correspondência com o ID, que será exclusivo. Em seguida, definimos o critério de atualização, que é uma operação AddToSet que só adicionará um item ao array se ele ainda não estiver no array.
O método UpdateOneAsync atualiza somente um documento, mesmo que o filtro de correspondência retorne mais de uma correspondência.
No arquivo "Controllers/playlistController.cs", adicione o seguinte ponto de extremidade para emparelhar com a função AddToPlayListAsync:
No endpoint PUT acima, estamos pegando o id dos parâmetros da rota e o movieId do corpo da solicitação e usando-os com a função AddToPlaylistAsync.
Isso nos leva à nossa parte final do espectro CRUD. Nós vamos cuidar da exclusão de dados.
No arquivo "Services/MongoDBService.cs" , adicione a seguinte função:
A função acima excluirá um único documento com base nos critérios do filtro. Os critérios do filtro, neste caso, são uma correspondência no ID que sempre será exclusivo. Seus filtros podem ser mais extravagantes, se você quiser.
Para finalizar, o endpoint dessa função teria a seguinte aparência no arquivo "Controllers/PlaylistController.cs"
Criamos apenas quatro pontos de extremidade, mas você poderia pegar tudo o que fizemos e criar mais 100 se quisesse. Todos eles usariam uma estratégia semelhante e podem aproveitar tudo o que o MongoDB tem a oferecer.

Testando os pontos de extremidade

Agora que você implementou o código, pode usar os quatro pontos de extremidade da API RESTful.
Ao executar o aplicativo, você deverá ver uma UI do Swagger, conforme abaixo: Página Swagger listando os endpoints CRUD do controlador de playlists
Você pode testar isso clicando no botão "Experimentar" em cada endpoint. É mais fácil começar com o endpoint POST /api/Playlist/ para adicionar alguns dados ao banco de dados. Os dados a seguir podem ser usados como dados fictícios:
A execução desse procedimento insere esses dados e permite buscá-los no GET e usar o valor de ID gerado para testar os outros pontos de extremidade.

Conclusão

Você acabou de ver como criar uma API RESTful simples de quatro endpoints usando o .NET Core e o MongoDB. Essa foi uma expansão do tutorial anterior, que abordou o mesmo uso do MongoDB, mas em um formato de aplicativo de console em vez de aplicativo web.
Como mencionei, você pode aplicar essa mesma estratégia em mais pontos de extremidade, cada um fazendo algo crítico para seu aplicativo da web.
Tem alguma dúvida sobre o driver para .NET? Dê uma olhada na MongoDB Community!

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Exemplo de código

Como usar a criptografia no nível do campo do lado do cliente (CSFLE) do MongoDB com C#


Sep 23, 2022 | 18 min read
Tutorial

Envio e solicitação de dados do MongoDB em um jogo Unity


Sep 09, 2024 | 8 min read
Tutorial

Projetar uma estratégia para desenvolver um jogo com Unity e MongoDB


Apr 02, 2024 | 7 min read
Artigo

Modelagem avançada de dados com o Realm .NET


Oct 19, 2022 | 7 min read
Sumário