Neste material vamos aprender alguns conceitos sobre uma Web REST API, o ASP.NET Core 5, o Entity Framework e o MySQL e com isso vamos aprender a criar a nossa primeira API usando esses frameworks e a linguagem C#.
Além disso, esta aplicação permitirá a criação de uma interface de acesso e documentação, conhecida como Swagger, para que desenvolvedores possam utilizar/testar esta aplicação.
O que é REST API?
Em 2000, Roy Fielding propôs a Transferência de Estado Representacional (REST) como uma abordagem de arquitetura para criar serviços Web. REST é um estilo arquitetural para a criação de sistemas distribuídos com base em hipermídia. A REST é independente de qualquer protocolo subjacente e não está necessariamente ligada a HTTP. No entanto, as implementações mais comuns de REST usam HTTP como o protocolo de aplicativo, e este guia foca a criação de APIs REST para HTTP.
Uma vantagem principal do REST sobre HTTP é que ele usa padrões abertos e não vincula a implementação da API ou os aplicativos cliente a nenhuma implementação específica. Por exemplo, um serviço Web REST poderia ser escrito em ASP.NET, e aplicativos cliente podem usar qualquer linguagem ou o conjunto de ferramentas que possa gerar solicitações HTTP e analisar respostas HTTP.
Fonte: https://docs.microsoft.com/pt-br/azure/architecture/best-practices/api-design
O que é o ASP.NET Core
ASP.NET Core é uma estrutura de software livre de plataforma cruzada, de alto desempenho para a criação de aplicativos modernos conectados à Internet, em nuvem. Com o ASP.NET Core, você pode:
Criar aplicativos Web e serviços, Internet das coisas (IOT) e back-ends móveis.
Usar suas ferramentas de desenvolvimento favoritas no Windows, macOS e Linux.
Implantar na nuvem ou local.
Executar no .NET Core.
Por que escolher o ASP.NET Core?
O ASP.NET Core oferece os seguintes benefícios:
Uma história unificada para a criação da interface do usuário da Web e das APIs Web.
Projetado para capacidade de teste.
As páginas facilitam a codificação de cenários voltados para a página e são mais produtivos. (Razor)
Permite que você use c# no navegador junto com JavaScript. Compartilhe a lógica de aplicativo do lado do cliente e do servidor toda escrita com o .NET. (Blazor)
Capacidade de desenvolver e executar no Windows, macOS e Linux.
De software livre e voltado para a comunidade.
Integração de estruturas modernas do lado do cliente e fluxos de trabalho de desenvolvimento.
Suporte para hospedar serviços RPC (Chamada de Procedimento Remoto) usando gRPC.
Um sistema de configuração pronto para a nuvem, baseado no ambiente.
Injeção de dependência interna.
Uma pipeline de solicitação HTTP leve, modular e de alto desempenho.
Ferramentas que simplificam o moderno desenvolvimento para a Web.
Fonte: https://docs.microsoft.com/pt-br/aspnet/core/introduction-to-aspnet-core?view=aspnetcore-5.0
O que é o EF (Entity Framework) Core?
O EF (Entity Framework) Core é uma versão leve, extensível, de software livre e multiplataforma da popular tecnologia de acesso a dados do Entity Framework.
EF Core pode servir como um mapeado relacional de objeto (O/RM), que:
Permite que os desenvolvedores do .NET trabalhem com um banco de dados usando objetos .NET.
Elimina a necessidade de maior parte do código de acesso a dados que normalmente precisa ser gravado.
O EF Core é compatível com vários mecanismos de banco de dados
O modelo
Com o EF Core, o acesso a dados é executado usando um modelo. Um modelo é feito de classes de entidade e um objeto de contexto que representa uma sessão com o banco de dados. O objeto de contexto permite consultar e salvar dados.
O EF dá suporte às seguintes abordagens de desenvolvimento de modelo:
Gerar um modelo de um banco de dados existente.
Codificar manualmente um modelo para corresponder ao banco de dados.
Depois que um modelo for criado, use Migrações do EF para criar um banco de dados com base no modelo. As migrações permitem a evolução do banco de dados conforme o modelo muda.
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
O que é o MySQL?
O MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL (Linguagem de Consulta Estruturada, do inglês Structured Query Language) como interface. É atualmente um dos sistemas de gerenciamento de bancos de dados mais populares da Oracle Corporation, com mais de 10 milhões de instalações pelo mundo.
Entre os usuários do banco de dados MySQL estão: NASA, Friendster, Banco Bradesco, Dataprev, HP, Nokia, Sony, Lufthansa, U.S. Army, U.S. Federal Reserve Bank, Associated Press, Alcatel, Slashdot, Cisco Systems, Google, entre outros.
Importante: Para utilizar o MySQL, é preciso instalá-lo em seu computador!!!
Sigo os passos deste video para te auxiliar: https://www.youtube.com/watch?v=iYN9a3i2qkQ
O que é o Swagger?
Especificação criada em 2011 pela Wordnik (dicionário de inglês online) com objetivo de documentar internamente suas APIs, porém do decorrer de sua evolução, mostrou-se eficaz por atender simultaneamente, necessidade de documentação do cliente e o servidor.
Desenvolvida com base no próprio JSON (porém suporta XML), o formato mais popular para APIs no estilo RESTful, o que traz uma agradável familiaridade à documentação. Além disso, o Swagger é um framework completo para descrição, consumo e visualização de serviços rest.
Seu objetivo é permitir que a documentação evolua na mesma cadência de evolução da API, por ser gerada automaticamente com base nas anotações do código.
Mas, o que exatamente é este tal de Swagger?
O Swagger é um projeto da especificação OpenAPI, uma linguagem de descrição de contratos APIs Rest. A OpenAPI estabelece um formato JSON com campos convencionais (através de um JSON Schema) para descrever recursos, modelos de dados, URIs, Content-Types, métodos HTTP aceitos e códigos de resposta.
O Swagger é um projeto composto por algumas ferramentas que auxiliam o desenvolvedor de APIs REST em algumas tarefas como:
Modelagem da API.
Geração de documentação da API.
Geração de códigos do Cliente e do Servidor, com suporte a várias linguagens de programação.
Vamos começar a desenvolver nossa primeira Web API em C# com ASP.NET Core 5, EF Core 5 e MySql!!
Primeiramente, vamos entender os elementos utilizados no projeto:
.NET Core SDK 5.0
Visual Studio 2019 Community (16.8.2)
ASP .NET Core 5.0
EF Core 5.0.1
MySql 8.0
MySql WorkBench
Provedor Pomelo.EntityFrameworkCore.MySql (5.0.0-alpha.2)
Projeto ASP .NET Core Web API
- Enable OpenAPI Support
Projeto - Pacotes usados
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Tools
- Microsoft.EntityFrameworkCore.Design
- Pomelo.EntityFrameworkCore.MySql (5.0.0-alpha.2)
Passo 1: Abre seu Visual Studio e inicie a criação de um novo projeto!
Passo 2: Selecione o projeto API Web do ASP.NET Core
Passo 3: Defina o nome do seu projeto
Passo 4: Mantenha as configurações padrões e crie o projeto
Passo 5: Com o projeto criado, exclua os arquivos WeatherForecast e WeatherForecastController. Esses arquivos são criados automaticamente apenas para demonstrar um primeiro exemplo de uma API com model e controller.
Passo 6: Vamos agora importar os pacotes das dependências necessárias para o nosso projetos, que são:
- Microsoft.EntityFrameworkCore (Estável mais recente 5.0.7)
- Microsoft.EntityFrameworkCore.Tools (Estável mais recente 5.0.7)
- Microsoft.EntityFrameworkCore.Design (Estável mais recente 5.0.7)
- Pomelo.EntityFrameworkCore.MySql (5.0.0-alpha.2)
Para isso, no Visual Studio, acesse a opção: Ferramentas -> Gerenciador de Pacotes do Nuget -> Gerenciar Pacotes do Nuget para a Solução...
Na aba Procurar, pesquise por cada pacote acima, marque as opções (Projeto/[Nome do Projeto]) e clique em Instalar
Passo 7: Após o projeto configurado, vamos à criação dos elementos no projeto. Sendo assim, crie uma nova pasta no projeto chamada Models. Dentro da pasta crie uma classe chamada Produto. Esta classe corresponde a uma model que será utilizada no nosso projeto.
O conteúdo da classe Produto deverá ser:
public class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
public decimal Preco { get; set; }
public int Estoque { get; set; }
}
Passo 8: Crie uma nova pasta no projeto chamada Data. Dentro da pasta crie uma classe chamada AppDbContext. Esta classe corresponde ao contexto do ORM usando o framework EF.
O conteúdo da class AppDbContext deverá ser:
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
{
}
public DbSet<Produto> Produtos { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity<Produto>()
.Property(p => p.Nome)
.HasMaxLength(80);
modelBuilder.Entity<Produto>()
.Property(p => p.Preco)
.HasPrecision(10, 2);
modelBuilder.Entity<Produto>()
.HasData(
new Produto { Id = 1, Nome = "Caderno", Preco = 7.95M, Estoque = 10 },
new Produto { Id = 2, Nome = "Borracha", Preco = 2.45M, Estoque = 30 },
new Produto { Id = 3, Nome = "Lápis", Preco = 1.50M, Estoque = 20 }
);
}
}
Passo 9: Precisamos agora, configurar para que nossa aplicação tenha acesso ao nosso banco de dados, que no caso será o MySQL. Para isso, abra a classe Startup e altere o método public void ConfigureServices(IServiceCollection services), para:
public void ConfigureServices(IServiceCollection services)
{
string mySqlConnection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContextPool<AppDbContext>(options =>
options.UseMySql(mySqlConnection,
ServerVersion.AutoDetect(mySqlConnection))
);
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebApplication2",
Version = "v1" });
});
}
Passo 10: Além disso, altere o arquivo appsettings.json, para incluir as configurações de login e senha ao banco de dados:
{
"ConnectionStrings": {
"DefaultConnection": "server=localhost; port=3306; database=produtosdb; user=root; password=; Persist Security Info=False"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Passo 11: Agora com nosso banco de dados configurado, precisamos executar alguns comandos para que nossa aplicação aplique as definições de models e ORM no banco de dados MySql. Para isso, acesse a opção no Visual Studio: Ferramentas -> Gerenciador de Pacotes do Nuget -> Console do Gerenciador de Pacotes, execute os comandos abaixo:
add-migration Inicial
update-database
Ao final, você deverá ter um resultado igual ao demonstrado abaixo:
PM> add-migration Inicial
Build started...
Build succeeded.
To undo this action, use Remove-Migration.
PM> update-database
Build started...
Build succeeded.
Done.
Passo 12: Verifique no seu banco de dados se as alterações foram aplicadas!
Passo 13: Com todas as configurações feitas, basta criarmos a nossa controller. A controller será responsável por receber as requisições, à partir das rotas requisitadas pelo cliente.
O Visual Studio consegue criar isso automaticamente para você, através do recurso de Scaffolding!
Para isso, clique sobre o botão direito na pasta Controller -> Adicionar -> Controlador...
Selecione a opção abaixo:
Posteriormente, basta informar a model Produto, a classe de contexto AppDbContext e o nome da nova controller que será criada!
Pronto! Sua API de Produtos está pronta para ser executada e testada! Clique no botão Play para executar sua aplicação! Teste-a com o Swagger, e através de outras aplicações clientes como o Postman.