Como dito anteriormente será utilizado ADO.NET para acessar o Postgres, para isso, instalaremos seu provider através do nuget, execute os comandos abaixo:
# dotnet add PessoaAPI.csproj package Npgsql
Em nosso exemplo utilizaremos o modelo (BLL, DAL, Model), apesar de ser uma arquitetura considerada "ultrapassada", é simples e eficaz para o nosso projeto.
Utilizando o VSCode vamos criar 3 pastas e 3 classes sendo elas BLL (BPessoa.cs), DAL(DPessoa.cs) e Model (Pessoa.cs). A estrutura ficará parecido com a figura 7.
Figura 7 - Estrutura aplicação
A classe DPessoa recuperará os dados do Postgres e alimentará uma lista de objetos do tipo Pessoa. A classe BPessoa consumirá a lista gerada pela classe DPessoa.
Abaixo os códigos das classes criadas.
Model/Pessoa.cs
using System;
namespace PessoaAPI.Models
{
public class Pessoa{
public Int64 Id {get;set;}
public Int64 CPF {get;set;}
public string Nome {get;set;}
}
}
DAL/DPessoa.cs
using Npgsql;
using System.Collections.Generic;
using System;
using PessoaAPI.Models;
namespace PessoaAPI.DAL
{
public class DAOPessoa{
public List<Pessoa> RetornarPessoas(){
var connString = "Host=localhost;Username=postgres;Password=zp3;Database=DotNetCoreAPI";
List<Pessoa> lstPessoa = new List<Pessoa>();
try{
using (var conn = new NpgsqlConnection(connString))
{
conn.Open();
using (var cmd = new NpgsqlCommand("SELECT id, cpf, Nome FROM \"Pessoa\"", conn))
using (var reader = cmd.ExecuteReader())
while (reader.Read()){
Pessoa pessoa = new Pessoa();
pessoa.Id = (Int64)reader["id"];
pessoa.CPF = (Int64)reader["cpf"];
pessoa.Nome = reader.GetString(2);
lstPessoa.Add(pessoa);
}
conn.Close();
}
}catch(Exception ex){
string teste = ex.Message;
}
return lstPessoa;
}
}
}
BLL/BPessoa.cs
using System.Collections.Generic;
using PessoaAPI.Models;
using PessoaAPI.DAL;
namespace PessoaAPI.BLL
{
public class BPessoa
{
public List<Pessoa> RetornarPessoas(){
return new DAOPessoa().RetornarPessoas();
}
}
}
Estrutura está criada, vamos criar a controller da nossa api. Dentro da pasta controller crie um arquivo chamado ApiPessoaController.cs. Adicionaremos o código a abaixo no controller.
ApiPessoaController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using PessoaAPI.BLL;
using PessoaAPI.Models;
namespace PessoaAPI.Controllers
{
[Route("api/[controller]")]
public class ApiPessoaController : Controller
{
// GET api/values
[HttpGet("{id}")]
public List<PessoaAPI.Models.Pessoa> Get(){
return new BPessoa().RetornarPessoas();
}
}
}
O código acima "simplesmente" acessa a classe de negócio e expõe ela. Foi criado uma "rota" onde para acessarmos a API seja necessário colocar o "http://endereco/api/ApiPessoaController".
Após a implementação acima testaremos nossa api para verificar se tudo está funcionando como planejamos. Para isso execute os comandos abaixo:
# dotnet restore
# dotnet build
# dotnet run
Depois acesse http://localhost:5000/api/ApiPessoa/Get/ e o resultado esperado é parecido com a figura 8.
Figura 8 - Testando nossa api
Temos nossa API pronta, criaremos nosso cliente para consumo de nossa API.