Neste artigo eu vou mostrar como criar um CRUD básico em uma Web API com ASP .NET Core 2.0. |
Vamos criar um projeto ASP .NET Core Empty e a seguir definir uma WEB API com um CRUD Basico.
Nossa Web API vai tratar informações de filmes e expor serviços para realizar as operações CRUD.
Podemos usar o Visual Studio 2017 Community com update 15.5.1 que foi disponibilizado no mês de dezembro de 2017 ou podemos usar a linha de comando com o Visual Studio Code.
Vamos usar o Visual Studio Community 2017 neste artigo.
Recursos usados:
Criando o projeto no VS 2017
Abra o VS 2017 Community e crie um novo projeto ASP .NET Core usando o template Empty.
Ao final teremos o projeto conforme mostrado a seguir:
Definindo o Modelo de domínio
Vamos criar uma pasta Models no projeto usando o menu Project ->New Folder;
A seguir crie uma classe chamada Filme na pasta Models com o seguinte código:
public class Filme
{
public int Id { get; set; }
public string Titulo { get; set; }
public int AnoLancamento { get; set; }
public string Resumo { get; set; }
}
|
A seguir vamos definir os modelos que iremos usar para expor informações da Web API. Seguimos essa abordagem para expor somente os dados que desejamos a quem vai consumir o serviço.
Para isso vamos definir dois modelos representandos pelas classes :
public class FilmeOutputModel
{
public int Id { get; set; }
public string Titulo { get; set; }
public int AnoLancamento { get; set; }
public string Resumo { get; set; }
public DateTime UltimoAcesso { get; set ;}
}
|
public class FilmeInputModel
{
public int Id { get; set; }
public string Titulo { get; set; }
public int AnoLancamento { get; set; }
public string Resumo { get; set; }
}
|
Definindo o serviço : IFilmeService e FilmeService
Vamos definir no projeto uma serviço que será usado para fornecer informações sobre filmes.
Vamos criar uma pasta Service via menu Project->New Folder e a seguir criar uma interface chamada IFilmeService onde vamos definir os métodos do serviço que vamos usar segundo o código abaixo:
using CrudWebAPIAspCore.Models;
using System.Collections.Generic;
namespace CrudWebAPIAspCore.Service
{
public interface IFilmeService
{
List<Filme> GetFilmes();
Filme GetFilme(int id);
void AddFilme(Filme item);
void UpdateFilme(Filme item);
void DeleteFilme(int id);
bool FilmeExists(int id);
}
}
|
Na mesma pasta vamos criar a classe FilmeService que implementa a interface IFilmeService e que tem o código abaixo:
using CrudWebAPIAspCore.Models; using System.Collections.Generic; using System.Linq; namespace CrudWebAPIAspCore.Service public FilmeService() public void AddFilme(Filme item) public void DeleteFilme(int id) public bool FilmeExists(int id) public Filme GetFilme(int id) public List<Filme> GetFilmes() public void UpdateFilme(Filme item) model.Titulo = item.Titulo; |
Definimos os métodos para gerenciar e retornar informações sobre filmes :
Criando o controlador FilmesControllers
Agora vamos criar o controlador FilmesControllers que será a nossa API onde iremos definir os métodos CRUD.
using CrudWebAPIAspCore.Models;
using CrudWebAPIAspCore.Service;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
namespace CrudWebAPIAspCore.Controllers
{
[Route("filmes")]
public class FilmesController : Controller
{
private readonly IFilmeService service;
public FilmesController(IFilmeService service)
{
this.service = service;
}
[HttpGet]
public IActionResult Get()
{
var model = service.GetFilmes();
var outputModel = ToOutputModel(model);
return Ok(outputModel);
}
[HttpGet("{id}", Name = "GetFilme")]
public IActionResult Get(int id)
{
var model = service.GetFilme(id);
if (model == null)
return NotFound();
var outputModel = ToOutputModel(model);
return Ok(outputModel);
}
[HttpPost]
public IActionResult Create([FromBody]FilmeInputModel inputModel)
{
if (inputModel == null)
return BadRequest();
var model = ToDomainModel(inputModel);
service.AddFilme(model);
var outputModel = ToOutputModel(model);
return CreatedAtRoute("GetFilme",new { id = outputModel.Id }, outputModel);
}
[HttpPut("{id}")]
public IActionResult Update(int id, [FromBody]FilmeInputModel inputModel)
{
if (inputModel == null || id != inputModel.Id)
return BadRequest();
if (!service.FilmeExists(id))
return NotFound();
var model = ToDomainModel(inputModel);
service.UpdateFilme(model);
return NoContent();
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
if (!service.FilmeExists(id))
return NotFound();
service.DeleteFilme(id);
return NoContent();
}
//--------------------------------------------------
//Mapeamentos : modelos envia/recebe dados via API
private FilmeOutputModel ToOutputModel(Filme model)
{
return new FilmeOutputModel
{
Id = model.Id,
Titulo = model.Titulo,
AnoLancamento = model.AnoLancamento,
Resumo = model.Resumo,
UltimoAcesso = DateTime.Now
};
}
private List<FilmeOutputModel> ToOutputModel(List<Filme> model)
{
return model.Select(item => ToOutputModel(item)).ToList();
}
private Filme ToDomainModel(FilmeInputModel inputModel)
{
return new Filme
{
Id = inputModel.Id,
Titulo = inputModel.Titulo,
AnoLancamento = inputModel.AnoLancamento,
Resumo = inputModel.Resumo
};
}
private FilmeInputModel ToInputModel(Filme model)
{
return new FilmeInputModel
{
Id = model.Id,
Titulo = model.Titulo,
AnoLancamento = model.AnoLancamento,
Resumo = model.Resumo
};
}
}
}
|
O código do controlador utiliza os métodos do nosso serviço para expor e permitir que seja possível gerenciar e obter informações sobre os filmes via Web API.
Realizamos também o mapeamento entre as classes do modelo de domínio e as classes que recebem e enviam informações via Web API.
Observe que definimos o roteamento usando o atributo Route : [Route("filmes")] e em cada método Action definimos o respectivo método HTTP (Get, Post, Delete, Put) com roteamento e caminhos URL:
Aqui temos que "{id}" é uma variável de espaço reservado para a ID do filme quando Update e Delete foram chamados;
Quando Get for invocado, ele atribui o valor "{id}" na URL ao parâmetro id do método e usa Name = "GetFilme" para criar uma rota nomeada que permite ao aplicativo criar um link HTTP usando o nome da rota.
Agora é só alegria...
Na próxima parte do artigo vamos testar as operações CRUD da nossa Web API usando o Postman.
"E estava ali um homem que, havia trinta
e oito anos, se achava enfermo.Jesus disse-lhe: Levanta-te, toma o teu leito, e
anda.Logo aquele homem ficou são; e tomou o seu leito, e andava. E aquele dia
era sábado."
João 5:5-9
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
ASP .NET Core - Criando uma aplicação com Angular 2 - Macoratti.net
ASP .NET Core - Criando uma aplicação Web no ... - Macoratti.net
Criando sua primeira Web API ASP .NET Core no Mac - Macoratti.net
ASP .NET Core - Criando sua primeira Web API com ... - Macoratti.net
ASP .NET Core - Usando a Injeção de dependência ... - Macoratti.net
ASP .NET Core - Criando uma aplicação Básica com ... - Macoratti.net
ASP .NET Core - Criando serviçoes backend para ... - Macoratti.net
ASP .NET Core - Criando uma aplicação com Angular 2 - Macoratti.net