Pessoal, vamos lá para mais um exemplo, este será o primeiro de dois artigos que pretendo fazer, vou dividir pois acho que é muito conteúdo para um artigo só.
E como dizia meu velho amigo Aristóteles :
“É fazendo que se aprende a fazer aquilo que se deve aprender a fazer.“
Então “bora” fazer!!!
O código fonte deste projeto como sempre se encontra no meu github basta fazer o download e abrir no Visual Studio (para este exemplo utilizei o 2017) e se divertir!
O ideal é que você baixe o exemplo e siga o artigo para entendimento.
Não vou aqui explicar linha por linha das classes do projeto, vou tentar explicar algumas funções e tecnologias, espero que você leitor, baixe e rode o projeto debugando para entender o funcionamento.
Navegue pelo conteúdo deste artigo
Utilizando o Entity Framework Core In-Memory.
O primeiro ponto que gostaria de falar é sobre o Entity Framework Core In-Memory, muitas ocasiões os times de desenvolvimento são separados do time de banco de dados, ou surge aquela questão “primeiro vamos precisar do banco de dados para depois começar o desenvolvimento” ou muitas vezes queremos somente criar um “protótipo funcional” da aplicação antes de efetivamente criar ou solicitar um banco de dados.
Nessas ocasiões o Entity Framework Core In-Memory pode ser utilizado, o In-Memory é um provedor do EF Core, basicamente ele irá guardar os dados em memória, ou seja eles estarão lá enquanto a aplicação está no ar, fechou perdeu seus dados.
Depois de validar seu protótipo ou já ter seu banco de dados basta trocar o provedor que a aplicação deverá funcionar sem impacto. O EF Core possui provedores para bancos como o SQL SERVER, SQLite, Postgree, etc.
O primeiro passo é instalar o pacote Nuget:
- Microsoft.EntityFrameworkCore.InMemory
Para configurar abra o arquivo Startup.cs e insira dentro do método ConfigureServices:
Pronto a aplicação já está configurada para usar o EF CORE In-Memory.
Utilizando e customizando o Swagger.
Agora vamos falar do Swagger, essa ferramenta já é bem conhecida e não vou explicar aqui seu funcionamento, basicamente utilizo para expor, documentar e testar meus serviços REST, vou apenas explicar como customizei a interface, mudei o logo, o titulo e as cores principais e ainda como utilizar token de autenticação na sua interface.
Para configurar o Swagger adicione o pacote Nuget:
- Swashbuckle.AspNetCore na versão (1.1.0)
Usei a versão antiga, já existe uma mais nova, mas algumas coisas nas configurações mudaram, vou estudar e depois mostro as diferenças.
Para configurar abra o arquivo Startup.cs e insira dentro do método ConfigureServices:
No código acima basicamente estamos habilitando o Swagger a trabalhar com um token JWT, configurando a versão, descrição e colocando informações de contato na interface.
O método IncludeXmlComments é muito importante pois é através dele que os comentários descritos nos métodos serão transformados na documentação da API.
Um detalhe aqui importante, você precisa setar nas propriedades do projeto na aba de “Build” o campo XML documentation file como na imagem abaixo para funcionar corretamente.
Agora vamos ver como customizar a tela do Swagger, adicione o seguinte código dentro do método Configure:
No código acima no método app.UseSwaggerUI injetamos um arquivo .css e um arquivo .js eles são responsáveis pela customização da interface. Estes arquivos e encontram em uma pasta chamada swagger-ui dentro de wwwroot, dentro da pasta também coloquei um logo no formato .svg.
O método app.Run efetuar o redirect para a página do swagger assim você não precisa setar a url na mão quando subir sua aplicação. A página do Swagger irá iniciar automaticamente.
Como deverá ficar a interface:
Como usar um token de autenticação na tela do Swagger.
A criação do token JWT ficará para a segunda parte deste artigo, só vou adiantar como utilizar um token na tela do Swagger já que estamos falando dele.
Alguns métodos da nossa API serão seguros e só irão funcionar se enviado no header da solicitação um token válido. A ideia aqui é que o usuário faça o login e “ganhe” um token e para consumir os métodos seguros.
Mas como passar um token na interface do Swagger? simples veja a imagem abaixo:
E com isso finalizamos o assunto Swagger.
Como utilizar o AutoMapper em uma aplicação .NET CORE.
O AutoMapper é uma biblioteca que transfere valores entre uma classe para outra, no nosso projeto a intenção é transformar DTOs (Data Transfer Objects) em Entidades do sistema.
Gosto de utilizar DTO’s nos meus projetos e para não ficar transferindo na “mão” os valores de um DTO para uma Entidade fica muito mais fácil usar o AutoMapper.
Para configurar o AutoMapper adicione dois pacotes via Nuget:
- AutoMapper;
- AutoMapper.Extensions.Microsoft.DependencyInjection
Para configurar abra o arquivo Startup.cs e insira dentro do método ConfigureServices:
services.AddAutoMapper();
Depois de configurado o AutoMapper precisamos criar uma classe que será responsável pelo mapeamento entre Dto e Entidade:
E agora como usar depois de configurado? No meu exemplo faço a injeção da interface do AutoMapper (IMapper) no construtor da classe como no exemplo abaixo:
E quando efetivamente precisar efetuar um mapeamento:
Observe as linhas 9 e 22 do código acima, ali acontece as transformações. Aqui nesse exemplo as propriedades da Entidade e do DTO são as mesmas então o mapeamento acontece automaticamente.
Podemos ter situações onde uma classe possui uma propriedade com nome diferente do propriedade da classe de destino, para isso o AutoMapper possui configurações para resolver esse problema (fica para um próximo artigo mostrar essa função).
Por enquanto é só no próxima parte vamos ver:
- Como configurar e utilizar token JWT (Jason Web Token);
- Como criar políticas de segurança;
- Como criar senhas seguras para seus usuários;
- Trocar o provider do EF Core para uma base de dados real;
Espero ter ajudado, dúvidas estou a disposição para ajudar, o código fonte completo como escrevi no inicio do artigo se encontra no meu github, fique a vontade para baixar e verificar o código.
Qualquer comentário sobre esse artigo é bem vindo, quem souber outras formas de fazer, outras tecnologias que podem ser implementadas, outras dicas e puderem contribuir eu agradeço muito e a comunidade só tem a ganhar!
Um abraço e até o próximo artigo!
Marcelo