ASP.NET MVC 5 - Criando e Consumindo uma Web API - I


Hoje vou iniciar uma série de artigos que mostra como criar uma WEB API na ASP .NET MVC 5 e depois como consumir essa API em uma aplicação ASP .NET MVC 5.

A criação de ASP .NET Web APIs e de projetos ASP .NET MVC 5 já foram discutidas em outros artigos que você pode conferir nas referências.

Assim, para não ficar repetitivo vou abordar o assunto como um tutorial resumido focando os pontos principais de cada etapa.

Vamos iniciar criando uma WEB API que expõe serviços para gerenciar informações de Contatos.

recursos usados :

Criando a WEB API ASP .NET MVC

Abra o Visual Studio 2019 Community e clique em New Project:

No menu File selecione Add -> New Project;

A seguir selecione :

Escolha o template ASP .NET Core Web Application e clique em Next;

A seguir informe o nome ApiContatos e clique em Create.

Selecione o template Web API, desmarque a opção para habilitar o HTTPS e clique em Create.

Abaixo temos a estrutura do projeto criado que iremos usar para criar nossa API.

Vamos incluir uma referência no projeto ao Entity Framework 6.x pois vamos usar esse ORM para definir a lógica de acesso aos dados.

No menu Tools-> Nuget Package Manager -> Manage Nuget Packages for Solution clique em Browse e informe o nome EntityFramework:

Definindo o modelo de domínio

Vamos definir um modelo de domínio bem simples para gerenciar informações de contatos. Para isso vamos criar as classes Contato e Endereco na pasta Models:

1- Contato

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ApiContatos.Models
{
    [Table("Contatos")]
    public class Contato
    {
        [Key]
        public int ContatoId { get; set; }
        [StringLength(100)]
        public string Nome { get; set; }
        [StringLength(150)]
        public string Email { get; set; }
        [StringLength(40)]
        public string Telefone { get; set; }
        [Required]
        public virtual Endereco Endereco { get; set; }
        public virtual int EnderecoId { get; set; }
    }
}

2- Endereco

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ApiContatos.Models
{
    [Table("Enderecos")]
    public class Endereco
    {
        [Key]
        public int EnderecoId { get; set; }
        [StringLength(150)]
        public string Local { get; set; }
        [StringLength(100)]
        public string Cidade { get; set; }
        [StringLength(100)]
        public string Estado { get; set; }
    }
}

Nas propriedades de navegação Enderecos e Contato usamos a palavra virtual que permite que o Entity Framework crie um proxy em torno da propriedade virtual para que a propriedade possa suportar o lazy load e rastreamento de alterações mais eficiente.

Essas propriedades são chamadas de propriedades de navegação e definem um relacionamento com outra entidade. Aqui estamos definindo um relacionamento do tipo um para um onde um Contato possui um Endereço.

Estamos usando o Data Annotations e definindo atributos que irão definir a criação dos campos nas tabelas com os tamanhos indicados. O atributo [key] indica que o campo é uma chave primária, e, o atributo [Table("")] define o nome da tabela que será criada no banco de dados. O Atributo [Required] indica que o valor é obrigatório e define a entidade principal no relacinamento um-para-um.

Esta definindo a propriedade EnderecoId na classe Contato para qualificar o endereço e assim não precisar localizar um endereço para obter e o seu id.

Criando a classe de contexto e a string de conexão

A classe de contexto é a classe mais importante ao trabalhar com o EF 6. Ela representa uma sessão com o banco de dados no qual você pode executar operações CRUD (Criar, Ler, Atualizar, Excluir).

A classe de contexto no Entity Framework é uma classe que deriva de System.Data.Entity.DbContextDbContext no EF 6.  Uma instância da classe de contexto representa os padrões Unit Of Work e Repository, nos quais podemos combinar várias alterações em uma única transação de banco de dados.

A classe de contexto é usada para consultar ou salvar dados no banco de dados. Também é usada para configurar as classes de domínio, mapeamentos relacionados ao banco de dados, alterar as configurações de rastreamento, armazenamento em cache, transação etc.

Vamos criar a classe AppDbContext na pasta Models :

using System.Data.Entity;
namespace ApiContatos.Models
{
    public class AppDbContext : DbContext
    {
        public AppDbContext() : base("ContatoContext")
        {}
        public DbSet<Contato> Contatos { get;set; }
        public DbSet<Endereco> Enderecos { get; set; }
    }
}

Na classe de contexto acima, as propriedades Contatos e Enderecos do tipo DbSet <TEntity> são chamadas de conjuntos de entidades. O EF Core irá mapear as entidades Contato e Endereco para as tabelas Contatos e Enderecos no banco de dados; se você usar o Migrations essas tabelas serão criadas no banco de dados.

Estamos definindo o nome da string de conexão como ContatoContext e a estamos passando no construtor da classe de contexto.

A seguir podemos definir o valor da string de conexão no arquivo Web.Config:

...
 <connectionStrings>
<add name="ContatoContext" connectionString="Data Source=MACORATTI;Initial Catalog=ClienteDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" providerName="System.Data.SqlClient"/>
</connectionStrings>


</configuration>

Se desejar criar as tabelas no banco de dados usando o Migrations emita os comandos na janela do Package Manager Console:

enable-migrations
add-migration Inicial
update-database

Nota: Se ocorrer um erro inesperado nesta fase talvez você tenha que desinstalar a versã0 6.3.0 do EF e instalar a versão 6.2.0

Ao final teremos as tabelas Contatos e Enderecos conforme abaixo:

Para agilizar eu já incluir alguns dados nas tabelas para podermos fazer os testes.

Na próxima parte do artigo vamos criar o controlador e definir os métodos Action GET para expor as funcionalidades da nossa API.

"Ninguém jamais viu a Deus; o Deus unigênito (Jesus), que está no seio do Pai, é quem o revelou."
João 1:17,18

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 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

Referências:


José Carlos Macoratti