Building a CRUD Web API with Dataverse Entities in ASP.NET Web API: A Beginner's Guide

Construindo uma API Web CRUD com entidades Dataverse na API Web ASP.NET: um guia para iniciantes

Introdução

No desenvolvimento de aplicativos modernos, a integração com plataformas de dados robustas é essencial para escalabilidade e flexibilidade. O Microsoft Dataverse (anteriormente conhecido como Common Data Service) fornece uma opção de armazenamento segura e baseada em nuvem para seus dados, atuando como a plataforma de dados subjacente para aplicativos Microsoft Power Platform e Dynamics 365.

Neste tutorial, vamos orientá-lo na criação de uma API Web CRUD (Create, Read, Update, Delete) usando uma entidade Dataverse na API Web ASP.NET . Este guia passo a passo foi criado para programadores iniciantes, oferecendo explicações detalhadas e exemplos de código.

Pré-requisitos

Antes de começar, certifique-se de ter o seguinte:

  • Visual Studio 2022 (Community Edition é suficiente)
  • .NET 6 SDK ou posterior
  • Um ambiente Dataverse ativo (disponível por meio de uma avaliação do Power Apps)
  • Conhecimento básico de C# e .NET
  • Acesso ao Azure Active Directory (Azure AD) (para registro de aplicativo)
  • Pacote NuGet Microsoft.PowerPlatform.Dataverse.Client

Índice

  1. Configurando o ambiente de desenvolvimento
  2. Criando uma entidade do Dataverse
  3. Criando o projeto ASP .NET Web API
  4. Conectando- se ao Dataverse a partir da API da Web
  5. Implementando Operações CRUD
  6. Testando a API
  7. Conclusão

1. Configurando o ambiente de desenvolvimento

Instalar o Visual Studio 2022

  • Baixe e instale o Visual Studio 2022 Community Edition do site oficial .
  • Durante a instalação, selecione as seguintes cargas de trabalho:
    • ASP.NET e desenvolvimento web
    • Desenvolvimento de desktop .NET

Instalar o SDK do .NET 6

Configurar um ambiente Dataverse


2. Criando uma entidade Dataverse

Acesse o Dataverse no Power Apps

  • Navegue até Dataverse > Tabelas no menu à esquerda.

Criar uma nova tabela (entidade)

  1. Clique em + Nova tabela .

  2. Configure a nova tabela:

    • Nome de exibição : Student
    • Nome de exibição plural : Students
    • Coluna primária : Student Name
    • Clique em Criar .

Adicionar colunas à tabela

Adicione as seguintes colunas à tabela Student :

  1. Idade

    • Tipo de dados : Número (número inteiro)
  2. E-mail

    • Tipo de dados : Texto
  3. Data de inscrição

    • Tipo de dados : Data e hora (somente data)

Salve a tabela depois de adicionar todas as colunas.


3. Criando o projeto ASP.NET Web API

Criar um novo projeto

  1. Abra o Visual Studio 2022 .
  2. Clique em Criar um novo projeto .
  3. Selecione ASP.NET Core Web API .
  4. Clique em Avançar .

Configurar o Projeto

  1. Nome do projeto : DataverseWebApi
  2. Localização : Escolha seu diretório preferido.
  3. Clique em Avançar .

Definir informações adicionais

  1. Framework : .NET 8.0 (Long-term support)
  2. Tipo de autenticação : Nenhum
  3. Habilitar suporte OpenAPI : Verificado (para Swagger UI)
  4. Clique em Criar .

4. Conectando-se ao Dataverse a partir da API da Web

Para interagir com o Dataverse, usaremos o pacote Microsoft.PowerPlatform.Dataverse.Client NuGet.

Instalar o pacote NuGet

  1. Clique com o botão direito do mouse no projeto no Solution Explorer .
  2. Selecione Gerenciar pacotes NuGet .
  3. Vá para a guia Procurar e procure por Microsoft.PowerPlatform.Dataverse.Client .
  4. Instale a versão estável mais recente.

Registrar um aplicativo no Azure AD

  1. Acesse o Portal do Azure .

  2. Navegue até Azure Active Directory > Registros de aplicativos .

  3. Clique em Novo registro .

    • Nome : DataverseWebApiApp
    • Tipos de contas com suporte : Contas somente neste diretório organizacional
    • URI de redirecionamento : https://localhost
    • Clique em Registrar .
  4. Anote o ID do aplicativo (cliente) .

  5. Em Certificates & secrets , crie um novo segredo de cliente. Anote-o.

Adicionar string de conexão ao appsettings.json

Abra appsettings.json e adicione sua string de conexão do Dataverse:

json
{ "Strings de conexão" : { "Dataverse" : "AuthType=ClientSecret;Url=https://yourorg.crm.dynamics.com;ClientId=seu_id_cliente;ClientSecret=seu_segredo_cliente;LoginPrompt=Auto" } }
  • Substitua https://yourorg.crm.dynamics.com pelo URL da sua organização do Dataverse.
  • Substitua your_client_id e your_client_secret pelos valores do Azure AD.

Observação de segurança : para produção, use métodos seguros como o Azure Key Vault para armazenar segredos.


5. Implementando Operações CRUD

Crie um modelo para o aluno

Crie uma pasta Models . Adicione uma nova classe Student.cs :

c sustenido
using System; namespace DataverseWebApi.Models { public class Student { public Guid Id { get ; set ; } public string StudentName { get ; set ; } public int Age { get ; set ; } public string Email { get ; set ; } data e hora públicas Data de inscrição { obter ; definir ;} } }

Crie um serviço para interagir com o Dataverse

Crie uma pasta Services . Adicione uma nova classe DataverseService.cs :

c sustenido
using Microsoft.PowerPlatform.Dataverse.Client; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Query; using System; using System.Collections.Generic; using System.Threading.Tasks; using DataverseWebApi.Models; using Microsoft.Extensions.Configuration; namespace DataverseWebApi.Services { classe pública DataverseService { privado somente leitura ServiceClient _serviceClient; public DataverseService ( configuração IConfiguration ) { var connectionString = configuração.GetConnectionString( "Dataverse" ); _serviceClient = novo ServiceClient(connectionString); } public async Task<Guid> CreateStudentAsync ( Aluno aluno ) { var entity = new Entity( "student" ); // Substitua pelo nome lógico da sua entidade entidade[ "nome do aluno" ] = aluno.Nome do Aluno; entidade[ "idade" ] = aluno.Idade; entidade[ "email" ] = aluno.Email; entity[ "datamatrícula" ] = aluno.Datamatrícula; retornar await Task.Run(() => _serviceClient.Create(entidade)); } public async Task<Aluno> GetStudentAsync ( Guid id ) { var colunas = new ColumnSet( "nome do aluno" , "idade" , "e-mail" , "data de inscrição" ); var entidade = await Task.Run(() => _serviceClient.Retrieve( "aluno" , id, colunas)); se (entidade == nulo ) retornar nulo ; retornar novo aluno { Id = entidade.Id, Nome do Aluno = entidade.GetAttributeValue< string >( "nome do aluno" ), Idade = entidade.GetAttributeValue< int >( "idade" ), E-mail = entidade.GetAttributeValue< string >( "e-mail" ), DataInscrição = entidade.GetAttributeValue<DataHora>( "datainscrição" ) }; } public async Tarefa UpdateStudentAsync ( Aluno aluno ) { var entidade = nova Entidade( "aluno" , aluno.Id); entidade[ "nome do aluno" ] = aluno.Nome do Aluno; entidade[ "idade" ] = aluno.Idade; entidade[ "email" ] = aluno.Email; entity[ "datamatrícula" ] = aluno.Datamatrícula; aguarde Task.Run(() => _serviceClient.Update(entidade)); } tarefa pública assíncrona DeleteStudentAsync ( Guid id ) { aguarde Task.Run(() => _serviceClient.Delete( "aluno" , id)); } public async Tarefa<Lista<Aluno>> GetStudentsAsync() { var query = new QueryExpression( "aluno" ) { ColumnSet = new ColumnSet( "nome do aluno" , "idade" , "e-mail" , "data de inscrição" ) }; var entidades = await Task.Run(() => _serviceClient.RetrieveMultiple(query)); var alunos = nova Lista<Aluno>(); foreach ( var entidade em entidades.Entidades) { alunos.Adicionar( novo aluno { Id = entidade.Id, Nome do Aluno = entidade.GetAttributeValue< string >( "nome do aluno" ), Idade = entidade.GetAttributeValue< int >( "idade" ), E-mail = entidade.GetAttributeValue< string >( "e-mail" ), DataInscrição = entidade.GetAttributeValue<DataHora>( "datainscrição" ) }); } alunos que retornam ; } } }

Explicação :

  • Nomes lógicos de entidades : substitua "student" , "studentname" , etc., pelos nomes lógicos de entidades reais do Dataverse.
  • ServiceClient : gerencia a conexão com o Dataverse.

Registre o serviço em injeção de dependência

Em Program.cs , adicione:

c sustenido
builder.Services.AddSingleton<DataverseService>();

Crie o StudentsController

Crie um novo controlador StudentsController.cs na pasta Controllers :

c sustenido
using DataverseWebApi.Models; using DataverseWebApi.Services; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace DataverseWebApi.Controllers { [ Rota( "api/[controlador]" ) ] [ ApiController ] classe pública StudentsController : ControllerBase { privado somente leitura DataverseService _dataverseService; Public StudentsController ( DataverseService dataverseService ) { _dataverseService = dataverseService; } // OBTER: api/Alunos [ HttpGet ] pública assíncrona Task<ActionResult<IEnumerable<Aluno>>> GetStudents() { var estudantes = aguardar _dataverseService.GetStudentsAsync(); retornar Ok(alunos); } // OBTER: api/Alunos/{id} [ HttpGet( "{id}" ) ] pública assíncrona Task<ActionResult<Aluno>> GetStudent(Guid id) { var estudante = aguarda _dataverseService.GetStudentAsync(id); se (aluno == nulo ) { retornar NotFound(); } retornar Ok(aluno); } // POST: api/Alunos [ HttpPost ] public async Task<ActionResult<Aluno>> CreateAluno(Aluno aluno) { var id = aguarda _dataverseService.CreateStudentAsync(aluno); aluno.Id = id; retornar CreatedAtAction( nome de (GetStudent), novo { id = aluno.Id }, aluno); } // COLOQUE: api/Alunos/{id} [ HttpPut( "{id}" ) ] public async Task<IActionResult> UpdateStudent ( Guid id, Aluno aluno ) { se (id != aluno.Id) { retornar BadRequest(); } aguarde _dataverseService.UpdateStudentAsync(aluno); retornar NoContent(); } // EXCLUIR: api/Alunos/{id} [ HttpDelete( "{id}" ) ] pública assíncrona Task<IActionResult> DeleteStudent ( Guid id ) { aguarde _dataverseService.DeleteStudentAsync(id); retornar NoContent(); } } }

Explicação :

  • Cada método de ação corresponde a uma operação CRUD.
  • Injeção de dependência : o controlador usa DataverseService injetado via construtor.

6. Testando a API

Execute o aplicativo

Pressione F5 no Visual Studio para executar o aplicativo. A Swagger UI deve abrir automaticamente.

Usando Swagger UI

Criar um novo aluno

  1. Expanda POST /api/Students .

  2. Clique em Experimentar .

  3. Insira o seguinte JSON no corpo da solicitação :

    json
    { "studentName" : "Alice Smith" , "age" : 22 , "e-mail" : "alice.smith@example.com" , "data de inscrição" : "2023-09-01" }
  4. Clique em Executar .

  5. Você deve receber uma resposta 201 Created com os detalhes do aluno.

Recuperar todos os alunos

  1. Expanda GET /api/Students .
  2. Clique em Experimentar e depois em Executar .
  3. A resposta deve listar todos os alunos no Dataverse.

Atualizar um aluno

  1. Copie o Id do aluno que você deseja atualizar.
  2. Expanda PUT /api/Students/{id} .
  3. Clique em Experimentar .
  4. Insira o Id no parâmetro id .
  5. Modifique o JSON no corpo da solicitação conforme necessário.
  6. Clique em Executar .

Excluir um aluno

  1. Expandir DELETE /api/Students/{id} .
  2. Clique em Experimentar .
  3. Digite o Id do aluno a ser excluído.
  4. Clique em Executar .

Verificar no Dataverse

  • Retorne ao portal do Power Apps.
  • Abra a tabela Alunos para ver as alterações refletidas.

Conclusão

Você construiu com sucesso uma CRUD Web API usando uma entidade Dataverse na ASP.NET Web API! Esta API pode ser estendida ou integrada a outros aplicativos, fornecendo uma maneira poderosa de gerenciar dados armazenados no Dataverse.

Principais conclusões

  • Integração do Dataverse : aproveitar o Dataverse permite um gerenciamento de dados escalável e seguro.
  • Uso do ServiceClient : O Microsoft.PowerPlatform.Dataverse.Client simplifica as interações com o Dataverse.
  • ASP.NET Web API : Criar APIs com ASP.NET Core é eficiente e está alinhado às práticas modernas de desenvolvimento web.

Próximos passos

  • Melhorias de segurança : implemente armazenamento seguro para cadeias de conexão e segredos (por exemplo, usando o Azure Key Vault).
  • Tratamento de erros : adicione mecanismos robustos de tratamento de erros e registro.
  • Autenticação : Proteja seus endpoints de API com autenticação e autorização.

Recursos adicionais


Procurando otimizar suas habilidades de software? Visite askpedromartins .com para aconselhamento especializado e soluções adaptadas às suas necessidades de desenvolvimento.

Voltar para o blogue
  • ChatGPT Uncovered Podcast

    Podcast descoberto do ChatGPT

    Pedro Martins

    Podcast descoberto do ChatGPT Podcast descoberto do ChatGPT Explorando as fronteiras dos modelos de conversação de IA Episódio 1: Compreendendo o ChatGPT Publicado em: 15 de maio de 2023 Seu...

    Podcast descoberto do ChatGPT

    Pedro Martins

    Podcast descoberto do ChatGPT Podcast descoberto do ChatGPT Explorando as fronteiras dos modelos de conversação de IA Episódio 1: Compreendendo o ChatGPT Publicado em: 15 de maio de 2023 Seu...

  • Power Apps In-Depth Podcast

    Podcast detalhado do Power Apps

    Pedro Martins

    Podcast detalhado do Power Apps Podcast detalhado do Power Apps Explorando os recursos do Microsoft Power Apps Episódio 1: Introdução ao Power Apps Publicado em: 20 de abril de 2023...

    Podcast detalhado do Power Apps

    Pedro Martins

    Podcast detalhado do Power Apps Podcast detalhado do Power Apps Explorando os recursos do Microsoft Power Apps Episódio 1: Introdução ao Power Apps Publicado em: 20 de abril de 2023...

  • Exploring Power Pages Podcast

    Explorando o podcast Power Pages

    Pedro Martins

    Explorando o podcast Power Pages Explorando o podcast Power Pages Mergulhando no mundo das Power Pages da Microsoft Episódio 1: Primeiros passos com Power Pages Publicado em: 10 de março...

    Explorando o podcast Power Pages

    Pedro Martins

    Explorando o podcast Power Pages Explorando o podcast Power Pages Mergulhando no mundo das Power Pages da Microsoft Episódio 1: Primeiros passos com Power Pages Publicado em: 10 de março...

1 de 3