Fala Galara,
Hoje vou mostrar como criar uma Web API muito básica com ASP.NET MVC 6 no Linux.
Esse tutorial é direcionado para quem está curioso sobre esse novo ambiente de desenvolvimento multiplataforma da Microsoft e quer dar seus primeiros passo com ASP.NET Core.
Para esse tutorial estou assumindo que o seu ambiente de desenvolvimento está todo instalado e configurado. Caso ainda não esteja, siga o link https://get.asp.net
Como meu ambiente de trabalho é linux, esse tutorial será baseado na CoreCLR runtime.
É possível verificar quais runtimes estão instaladas através do comando:
dnvm list
DNVM é uma ferramenta de gerenciamento de versão para a linha de comando. O DNVM permite configurar versão do .NET runtime, especificar qual versão do ambiente de execução será usada e até mesmo baixar outras versões.
Mas o que é uma Web API ?
O ASP.NET Web API é um framework que facilita a construção de serviços HTTP que podem ser consumidos por uma ampla gama de clientes, incluindo dispositivos móveis e navegadores.
Para isso, o ASP.NET Core 1.0 (Conhecido, também, como ASP.NET 5) possui, naturalmente, tudo o que nós precisamos.
Para exemplificar, iremos criar a Music API que expõe operações de CRUD simples.
Abra o terminal no diretório desejado e execute:
yo aspnet
Nesse momento o Yeoman irá fazer o download dos templetes do aspnet.
Após o download você estará apto a escolher o template “Web API Application”.
Digite o nome da aplicação.
Pronto! Aplicação criada. Você deverá receber algumas instruções como retorno.
Por hora, faça somente os passos a seguir:
cd MusicAPI dnu restore
DNU é uma ferramenta de linha de comando que fornece uma variedade de utilitários para auxiliar o desenvolvimento em ASP.NET. Mais comumente, vamos usar DNU para instalar e gerenciar pacotes de bibliotecas em nossa aplicação, e / ou para empacotar e publicar o nosso próprio aplicativo.
Feito isso, toda a estrutura inicial da aplicação estará criada.
É importante salientar que as aplicações ASP.NET Core são totalmente folder based, sendo assim, você poderá utilizar o editor de texto de sua preferência para trabalhar.
Eu utilizo e recomendo VSCode ou o Sublime Text 3.
A primeira coisa que devemos fazer é remover o “dnx451” do no nosso project.json. Esse é um problema já bem conhecido do generator-aspnet (Caso não exista a sessão “dnx451”, significa que já foi resolvido).
"frameworks": { "dnx451": { }, /* Remove this line */ "dnxcore50": { } },
O arquivo project.json é novo para ASP.NET Core. Ele é usado para definir as dependências do lado do servidor do projeto, bem como outras informações específicas do projeto.
Criando Music model
Crie uma pasta chamada “Models” na raiz da aplicação e dentro dela crie um arquivo chamado “Music.cs”
using System; namespace MusicAPI.Models { public class Music { public Guid Id { get; set; } public string Name { get; set; } public string AlbumName { get; set;} public string BandName { get; set; } public DateTime ReleaseDate { get; set; } } }
Perceba que a propriedade Id de nossa entidade Music é um Guid. Isso garantirá que só teremos uma entidade com esse identificador em toda a nossa aplicação.
Criando o repositório de Music model
O uso de classes de repositório é totalmente opcional, mas feremos dessa forma para que possamos conectar a qualquer banco de dados mais tarde.
Crie uma pasta chamada “Repositories” na raiz da applicação e adicione dois arquivos “IMusicRepository.cs” e “MusicRepository.cs”.
Aqui está o código de cada um dos arquivos:
IMusicRepository.cs
using MusicAPI.Models; using System.Collections.Generic; namespace MusicAPI.Repository { public interface IMusicRepository { void Add(Music item); IEnumerable GetAll(); Music Find(string key); void Remove(string Id); void Update(Music item); } }
MusicRepository.cs
using System; using System.Collections.Generic; using System.Linq; using MusicAPI.Models; namespace MusicAPI.Repository { public class MusicRepository : IMusicRepository { static List MusicList = new List(); public void Add(Music item) { MusicList.Add(item); } public Music Find(Guid Id) { return MusicList.Find(m => m.Id.Equals(Id)); } public IEnumerable GetAll() { return MusicList; } public void Remove(Guid Id) { var itemToRemove = MusicList.SingleOrDefault(r => r.Id == Id); if (itemToRemove != null) MusicList.Remove(itemToRemove); } public void Update(Music item) { var itemToUpdate = MusicList.SingleOrDefault(r => r.Id == item.Id); if (itemToUpdate != null) { itemToUpdate.Name = item.Name; itemToUpdate.AlbumName = item.AlbumName; itemToUpdate.BandName = item.BandName; itemToUpdate.ReleaseDate = item.ReleaseDate; } } } }
Adicionando a MusicController
É hora de adicionar a Controladora de nossa API. Dentro da pasta “Controllers” crie o arquivo ” “MusicController.cs”; Copie o código a seguir:
using MusicAPI.Models; using MusicAPI.Repository; using Microsoft.AspNet.Mvc; using System.Collections.Generic; using System; namespace MusicAPI.Controllers { [Route("api/[controller]")] public class MusicController : Controller { [FromServices] public IMusicRepository MusicRepo { get; set; } [HttpGet] public IEnumerable<Music>GetAll() { return MusicRepo.GetAll(); } [HttpGet("{id}", Name = "GetMusic")] public IActionResult GetById(Guid id) { var item = MusicRepo.Find(id); if (item == null) { return HttpNotFound(); } return new ObjectResult(item); } [HttpPost] public IActionResult Create([FromBody] Music item) { if (item == null) { return HttpBadRequest(); } MusicRepo.Add(item); return CreatedAtRoute("GetMusic", new { Controller = "Music", id = item.Id }, item); } [HttpPut("{id}")] public IActionResult Update(Guid id, [FromBody] Music item) { if (item == null) { return HttpBadRequest(); } var contactObj = MusicRepo.Find(id); if (contactObj == null) { return HttpNotFound(); } MusicRepo.Update(item); return new NoContentResult(); } [HttpDelete("{id}")] public void Delete(Guid id) { MusicRepo.Remove(id); } } }
Alguns detalhes sobre nossa Controller:
[Route(“api/[controller]”)] Esse é o novo “attribute based routing” do MVC 6 Web API.
[FromServices] Indica que a propriedade MusicRepo é obrigada a requisitar no objeto Services. Em outras palavras, MusicRepo é instanciado usando injeção de dependência que nos configuramos no Starup.cs.
GetAll() É um simples método HttpGet que retorna todas as músicas
GetById Retorna uma Música através do Id. É um simples HttpGet com um atributo nomeado para que possamos usá-lo também no método Create como “location header”.
O método Create, depois de inserir o registro, retorna o codigo 201 como status response e fornece o location header.
Configurando a Injeção de Dependências
O método “ConfigureServices” do arquivo “Startup.cs” é o local onde ensinaremos ao container de IoC como resolver a instanciação de objetos do tipo IMusicRepository
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); //using Dependency Injection services.AddSingleton<IMusicRepository, MusicRepository>(); }
Testando Web API usando o POSTMAN
Vá para o terminal e certifique-se de que está no diretório raiz da aplicação.
Execute o comando
dnx web
DNX é um kit de desenvolvimento de software (SDK) e ambiente de execução que tem tudo que você precisa para criar e executar aplicativos .NET para Windows, Mac e Linux. Ele fornece um processo de host, lógica de hospedagem CLR e muito mais. O DNX foi construído para executar aplicativos ASP.NET Web em multi-plataformas, mas pode executar outros tipos de aplicativos .NET, também, como aplicações de console cross-platform.
Como dito antes, testaremos nossa aplicação através do POSTMAN, que é muito simples de se usar.
(Para gerar um Guid você pode usar qualquer gerador de Guid que encontrar pela web)
Galera, por hoje é isso!
Em breve darei sequência a esse tutorial onde iremos configurar o EF7 e Aprender mais sobre Injeção de Dependências.
Até lá.