Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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.

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.