Construindo APIs Restful com .NET Core usando Entity Framework e JWT
Parte — I
Baixe o ebook com o compilado desses artigos clicando aqui.
Obrigado e boa leitura.
Olá desenvolvedor, tudo bem? Espero que esteja bem e com ânimo, pois nesta série de 4 artigos irei mostrar como construir APIs Restful profissionais, utilizando Entity Framework Core para acesso a dados e JWT (JSON Web Tokens) para a segurança.
Meu objetivo é que no final desses artigos você tenha aprendido a importância do padrão restful e como utilizar ele para criar suas próprias APIs de forma fácil, segura e rápida. E o melhor de forma gratuita, pois assim que o ensino deveria ser.
Requisitos
Sem mais delongas, já irei apresentar as ferramentas e as versões que iremos utilizar:
· Visual Studio 2017 ou superior (Vou usar o 2019)
· .NET Core 2.1 ou superior (Vou usar o 2.1)
· MySQL 8 ou superior (Vou usar o 8.0.16)
· Advanced REST Client ou qualquer software para testar requisições HTTP
· Conhecimento básico sobre MVC.
· Café, muito café, você vai precisar.
Com essas ferramentas já instaladas e o café pronto vamos iniciar criando nossa base de dados que iremos consumir na API.
OBS: Estou utilizando o MySQL, porém o mesmo código funciona para qualquer outro banco relacional, fique à vontade para escolher o de sua preferência.
Para não complicar e deixar maçante, criei uma base de dados simples com os seguintes campos:
· Id
· Nome
· Senha
Código para criação do banco:
Entendendo o REST e as APIs RESTful
Antes de sair codificando nossas API por aí, vamos primeiro entender o que é o padrão REST e onde ele é utilizado, já escrevi sobre isso em outro artigo, porém irei dar uma rápida revisada sobre seu conceito, caso você já saiba o que é uma API REST e onde ela é utilizada, pode pular pro próximo tópico sem problemas.
Apesar de parecer um bicho de 7 cabeças, REST, não passa de um modelo para projetar softwares que necessitam de comunicação via rede, ou seja, esse padrão é utilizado para enviar / receber informações utilizando o protocolo HTTP, criado por Roy Fielding (um dos principais criadores do protocolo HTTP). Parece complicado? Mas vamos lá que vai ficar fácil!
Em seu literal, REST significa “Representational State Transfer” ou “Representação do Estado de Referência”, como já mencionado, ele utiliza o padrão HTTP, para sua comunicação, nisso ele tem 4 principais agentes, são eles: POST, GET, PUT, DELETE.
POST: O POST é utilizado quando precisamos enviar dados para algum lugar, pense no post como uma caixa, na qual nossa aplicação coloca todos os seus dados e envia para alguma outra aplicação ou base de dados, deixando assim os dados protegidos e bem estruturados.
GET: O GET é utilizado quando precisamos pegar dados de algum lugar, pense nele como uma vara de pesca, quando precisamos buscar nossos dados (no caso o peixe), utilizamos a vara de pesca (o GET) para busca — lo e trazer — lo já pronto para comer (tratar os dados).
DELETE: Com um nome bastante intuitivo, o DELETE geralmente é utilizado quando precisamos apagar algo da nossa base de dados ou excluir algum recurso da nossa aplicação.
PUT: O PUT é utilizado quando precisamos alterar algum dado ou recurso da nossa aplicação ou da nossa base de dados, pense no PUT como uma borracha, na qual você usa só quando precisa reescrever algum texto (dados).
Então quando nós precisamos acessar alguma base de dados, fazemos um “Request” (requisição) para nossa API, e ela nos retorna os dados em JSON ou XML como “Response” (resposta), imagine que minha aplicação precisa de todos os nomes cadastrados, então minha aplicação faz o seguinte processo:
Uma API Rest funciona através de rotas, que identificam o que nós queremos consumir dela, o que iremos criar aqui funcionará da seguinte forma:
“Quero inserir um novo usuário”
https://localhost:porta/api/controller/Inserir
Para podermos inserir um usuário iremos fazer uma requisição através do método POST enviando os dados do usuário para a rota acima.
“Quero ver todos os usuários”
https://localhost:porta/api/controller/TodosOsUsuarios
Para podermos ver todos os usuários iremos fazer uma requisição através do método GET para a rota acima e ele irá nos retornar um JSON ou XML com os dados.
“Quero deletar um usuário”
https://localhost:porta/api/controller/Deletar
Para podermos deletar um usuário iremos fazer uma requisição através do método DELETE enviando o id do usuário para a rota acima.
“Quero alterar um usuário”
https://localhost:porta/api/controller/Atualizar
Para podermos alterar um usuário iremos fazer uma requisição através do método PUT enviando os dados do usuário alterado para a rota acima.
Todas as rotas foram apenas exemplos, na nossa API vai ficar um pouco diferente.
Entendendo JSON e XML
JSON e XML são formatos de arquivos para a troca de dados na web, ambos formatos utilizados em APIs e no nosso caso não será diferente, como o XML é um formato mais antigo e um pouco mais complexo de se manipular, estarei utilizando JSON.
JSON significa Javascript Object Notate, e ele não tem esse nome atoa, o seu formato de armazenar os dados é idêntico ao um objeto javascript.
OBS: Não confunda objeto javascript com objeto “Classe”, eles são parecidos, mas tem suas particularidades.
Vou apresentar uma simples comparação de como iremos tratar o JSON na nossa aplicação.
Imagine que você tem a seguinte classe:
Serializar: Transformar os dados das variáveis em um documento JSON
Agora quando nós formos serializar o objeto novoProduto ele se transformaria no seguinte documento JSON:
E é esse o formato de dados que iremos enviar para nossa aplicação, quando a aplicação receber, ela vai deserializar, e transformar em um novo objeto produto, irá validar os dados e se tudo estiver correto, irá retornar uma mensagem de sucesso, caso tenha algo errado irá retornar uma mensagem de erro.
Deserializar: Extrair os dados de um documento JSON, no nosso caso, extrair e colocar em um objeto.
Criando o projeto e configurando suas dependências
Vamos agora criar nosso projeto e configura — lo para que funcione de acordo com nossas necessidades.
Abra seu Visual Studio 2017 ou superior.
Com o Visual Studio já abeto vá em Arquivo > Novo > Projeto ou digite
Ctrl + Shift + N
Selecione o template: Aplicativo Web ASP .NET CORE e clique em próximo.
Dê um nome para seu projeto, escolhe o lugar onde ele irá ficar e clique em próximo.
Aqui você irá selecionar a versão do .NET Core e o template para a aplicação WEB.
Selecione o template API.
Deixe por padrão .NET Core.
Na versão deixe por padrão 2.2.1 ou superior.
E deixe marcado para configurar HTTPS.
Agora vamos criar o controller que iremos utilizar para criar nossas rotas de requisição REST.
Por padrão o projeto Web API já vem com um controller chamado ValuesController já criado com alguns exemplos de métodos com os verbos HTTP.
Vamos deletar esse controller e criar um totalmente em branco, para termos um melhor entendimento da funcionalidade da API.
No gerenciador de soluções do Visual Studio clique na pasta Controllers e depois clique com o botão direito no arquivo ValuesController.cs aperte del ou clique em excluir.
Agora nós vamos adicionar o nosso próprio controller e configura-lo para poder criar nossas rotas de requisição para a API.
No gerenciador de soluções clique com o botão direito na pasta controllers > adicionar > controllador.
Selecione o template API — Vazio e clique em adicionar.
Dê o nome de UsuarioController e clique em adicionar, após isso será gerado um arquivo UsuarioController.cs que será onde nós iremos colocar nossas rotas e o que elas irão fazer.
Abra o arquivo UsuarioController.cs, e vamos criar o método Index, que será a tela padrão que irá aparecer na API na hora que compilarmos o projeto.
Digite o seguinte código dentro da classe UsuarioController:
OBS: A mensagem pode ser a que você quiser, aqui só é um exemplo rs.
Da mesma forma que já vem criado um controller chamado values, a API já vem configurada para acessar esse controller por padrão.
Como não queremos que ele acesse values e sim usuário nós precisamos alterar isso no arquivo launchSettings.json.
Vá em Properties > launchSettings.json.
Na linha 15 altere de:
“launchUrl”: “api/values”,
Pra:
“launchUrl”: “api/usuario”,
Na linha 23 altere de:
“launchUrl”: “api/values”,
Pra:
“launchUrl”: “api/usuario”,
Apertando F5 ou clicando em Iniciar teremos a seguinte tela:
Pronto, agora nossa api já está criada e configurada para rodar por padrão o controller Usuario, na próxima parte do artigo nós iremos adicionar o Entity Framework ao nosso projeto e criar as nossas 5 rotas para acesso aos dados.