Primeiros passos com Web API usando o ASP.NET Core no Linux

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

11

DNVM – .NET Version Manager
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”.

Untitled

Digite o nome da aplicação.

2

Pronto! Aplicação criada. Você deverá receber algumas instruções como retorno.

3

Por hora, faça somente os passos a seguir:

cd MusicAPI
dnu restore

 

DNU – .NET Development Utilities
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.

12

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": { }
},

 

project.json
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 – .NET Execution Environment
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)

– POST
7

– GET
8

– PUT
9

– DELETE
10

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á.

Github: https://github.com/elvisdelima/MusicAPI

Standard