Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cristianosantan/apicardnumber
🤖 API - gera cartão com número aleatório.
https://github.com/cristianosantan/apicardnumber
api-rest asp-net-core csharp entity-framework-core
Last synced: 29 days ago
JSON representation
🤖 API - gera cartão com número aleatório.
- Host: GitHub
- URL: https://github.com/cristianosantan/apicardnumber
- Owner: CristianoSantan
- Created: 2021-05-28T23:25:41.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2021-06-19T02:15:25.000Z (over 3 years ago)
- Last Synced: 2024-04-24T09:49:32.815Z (8 months ago)
- Topics: api-rest, asp-net-core, csharp, entity-framework-core
- Language: C#
- Homepage:
- Size: 1.11 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Desafio: criar uma API REST C# com .Net Core e Entity Framework Core.
Este repo usa os conceitos básicos da criação de uma API Web com o ASP.NET Core.
documentação consultada [Microsoft](https://docs.microsoft.com/pt-br/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio-code)Seque os passos para a criação desta API:
✔ Criar um projeto de API Web.
✔ Adicione uma classe de modelo e um contexto de banco de dados.
✔ Faça o Controller com métodos CRUD.
✔ Configure o roteamento, os caminhos de URL e os valores retornados.
✔ Chamar a API Web com o Postman.
No final, você terá uma API REST que fornece um sistema de geração de número aleatorio de cartão de crédito virtual.### Pré-requisitos
- Visual Studio Code
- Extensão C# para Visual Studio Code
- SDK .NET core 3 ou superior
- OS Windows 10### Visão geral
Você ira criar a seguinte API:
| API | Descrição | Corpo da solicitação | Corpo da resposta |
| --------------------------- | ---------------------------------- | ----------------------- | ---------------------------------------- |
| POST /v1/users | Adiciona um novo usuario | JSON com nome e email | Objeto do usuario cadastrado |
| GET /v1/users | Obtem todos os usuarios | nenhum | Matriz de usuarios |
| POST /v1/products | Pedido de novo cartão | JSON com tÃtulo e email | Objeto com o número do cartão de crédito |
| GET /v1/products/users/{id} | Obter cartões por email do usuario | nenhum | Matriz de todos os pedidos de cartão |### Criar o projeto Web
- Abra o terminal integrado.
- Altere os diretórios (cd) para a pasta que conterá a pasta do projeto.
- Execute os seguintes comandos:```
dotnet new webapi -o testeef
cd testeef
dotnet add package Microsoft.EntityFrameworkCore.InMemory
code -r ../testeef
```- Quando uma caixa de diálogo perguntar se você deseja adicionar os ativos necessários ao projeto, selecione Sim.
Os comandos anteriores:
- Cria um novo projeto de API Web e o abre no Visual Studio Code.
- Adiciona os pacotes do NuGet que são exigidos na próxima seção.### Remova arquivos padrão
- Na pasta raiz do projeto remova o arquivo WeatherForecast.cs
- na pasta Controllers remova o arquivo WeatherForecastController.cs### Atualize o launchUrl
No Properties\launchSettings.json, atualize launchUrl de "swagger" para "v1/users":
```
"launchUrl": "v1/users",
```Como o Swagger foi removido, a marcação anterior altera a URL que é lançada para o método GET do controlador adicionado nas seções a seguir.
### Adicione classes de modelo
- Adicione uma pasta chamada Models .
- Adicione um arquivo User.cs à pasta Models com o seguinte código:```
using System.ComponentModel.DataAnnotations;namespace testeef.Models
{
public class User
{
[Key]public string Id_email { get; set; }
[Required(ErrorMessage = "Este campo é obrigatório")]
[MaxLength(60, ErrorMessage = "Este campo deve conter entre 3 e 60 caracteres")]
[MinLength(3, ErrorMessage = "Este campo deve conter entre 3 e 60 caracteres")]public string Name { get; set; }
}
}
```- Adicione um arquivo Product.cs à pasta Models com o seguinte código:
```
using System.ComponentModel.DataAnnotations;namespace testeef.Models
{
public class Product
{
[Key]public int Id { get; set; }
[Required(ErrorMessage = "Este campo é obrigatório")]
[MaxLength(60, ErrorMessage = "Este campo deve conter entre 3 e 60 caracteres")]
[MinLength(3, ErrorMessage = "Este campo deve conter entre 3 e 60 caracteres")]public string Title { get; set; }
public int Number_card { get; set; }
[Required(ErrorMessage = "Este campo é obrigatório")]
public string UserId_email { get; set; }
public User User { get; set; }
}
}
```### Adicione um contexto de banco de dados
- Adicione uma pasta chamada Data.
- Adicione um arquivo DataContext.cs à pasta Data com o seguinte código:```
using Microsoft.EntityFrameworkCore;
using testeef.Models;namespace testeef.Data
{
public class DataContext : DbContext
{
public DataContext(DbContextOptions options)
: base(options)
{}
public DbSet Products { get; set; }
public DbSet Users { get; set; }
}
}
```### Registre o contexto do banco de dados
No ASP.NET Core, serviços como o contexto de BD precisam ser registrados no contêiner de DI (injeção de dependência). O contêiner fornece o serviço aos controladores.
Atualize Startup.cs com o seguinte código:
```
// dependências
using Microsoft.EntityFrameworkCore;
using testeef.Data;// Add em public void ConfigureServices
services.AddDbContext(opt => opt.UseInMemoryDatabase("Database"));
services.AddScoped();
```Se precisar confira como ficou em [Startup.cs](https://github.com/CristianoSantan/ApiCardNumber/blob/master/Startup.cs).
O código anterior:
- Remove as chamadas do Swagger.
- Adiciona o contexto de banco de dados ao contêiner de DI.
- Especifica que o contexto de banco de dados usará um banco de dados em memória.### Adicione Controllers
Os próximos codigos:
- Marca a classe com o [ApiController] atributo. Esse atributo indica se o controlador responde às solicitações da API Web.
- onde faram nossas requisições#### Adicione um arquivo UserController.cs à pasta Controllers com o seguinte código:
```
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using testeef.Data;
using testeef.Models;namespace testeef.Controllers
{
[ApiController]
[Route("v1/users")]public class UserController : ControllerBase
{
[HttpGet]
[Route("")]public async Task>> Get([FromServices] DataContext context)
{
var Users = await context.Users.ToListAsync();
return Users;
}[HttpPost]
[Route("")]public async Task> Post(
[FromServices] DataContext context,
[FromBody] User model)
{
if (ModelState.IsValid)
{
context.Users.Add(model);
await context.SaveChangesAsync();
return model;
}
else
{
return BadRequest(ModelState);
}
}
}
}
```#### Adicione um arquivo ProductController.cs à pasta Controllers com o seguinte código:
```
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using testeef.Data;
using testeef.Models;namespace testeef.Controllers
{
[ApiController]
[Route("v1/products")]public class ProductController : ControllerBase
{
[HttpGet]
[Route("users/{id}")]public async Task>> GetByIdUser([FromServices] DataContext context, string id)
{
var products = await context.Products
.Include(x => x.User)
.AsNoTracking()
.Where(x => x.UserId_email == id)
.ToListAsync();
return products;
}[HttpPost]
[Route("")]
public async Task> Post(
[FromServices] DataContext context,
[FromBody] Product model)
{
if (ModelState.IsValid)
{
Random randNum = new Random();var Product = new Product
{
Title = model.Title,
Number_card = randNum.Next(),
UserId_email = model.UserId_email,
};context.Products.Add(Product);
await context.SaveChangesAsync();
return Product;
}
else
{
return BadRequest(ModelState);
}
}
}
}
```### Postman para testar a API Web
- Instalar o [Postman]() ou um outro da sua escolha
- Inicie sua API apertando as teclas (Ctrl + F5).
- Inicie o Postman.
- Desabilite a Verificação do certificado SSL
- Em Arquivo > Configurações (guia Geral), desabilite Verificação de certificado SSL⚠Aviso - Habilite novamente a verificação do certificado SSL depois de testar o controlador.
#### Cadastrando usuario
- Crie uma solicitação.
- Defina o método HTTP como POST.
- De definir o URI como https://localhost:/v1/users . Por exemplo, https://localhost:5001/v1/users.
- Selecione a guia Corpo.
- Selecione o botão de opção raw.
- Defina o tipo como JSON (aplicativo/json).
- No corpo da solicitação, insira JSON para usuario:```
{
"id_email":"[email protected]",
"name":"José"
}
```- Selecione Enviar.
#### Fazendo pedido de cartão
- Crie uma solicitação.
- Defina o método HTTP como POST.
- De definir o URI como https://localhost:/v1/products . Por exemplo, https://localhost:5001/v1/products.
- Selecione a guia Corpo.
- Selecione o botão de opção raw.
- Defina o tipo como JSON (aplicativo/json).
- No corpo da solicitação, insira JSON para o pedido do cartão:```
{
"title":"cartão 1",
"userId_email":"[email protected]"
}
```- Selecione Enviar.
#### Consultando os cartões gerados por cada email de usuario
- Crie uma solicitação.
- Defina o método HTTP como GET.
- Defina o URI como, https://localhost:5001/v1/products/users/[email protected].
- Selecione Enviar.
- e sera retornado um objeto com os cartões solicidados por cada email.