Esta es una guía en la que aprenderemos a conectar una API con ApsaraDB/postgreSQL
1. creamos una nueva API usando el comando dotnet new webapi
2. Agregamos los nugets para Entity framework y PostgreSQL
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
3. Creamos la clase TodoItem, TodoItem.cs
namespace ApiPostgre;
public class TodoItem
{
public int Id { get; set; }
public string Title { get; set; }
public bool IsCompleted { get; set; }
}
4. Creamos TodoItemContext.cs para manejar Entity framework
using Microsoft.EntityFrameworkCore;
namespace ApiPostgre;
public class TodoItemContext : DbContext
{
public DbSet<TodoItem> TodoItems { get; set; }
public TodoItemContext(DbContextOptions<TodoItemContext> options) : base(options)
{
}
}
5. Agregamos TodoItemController incluyendo todos los mentodos (get, post, put, delete)
using Microsoft.AspNetCore.Mvc;
namespace ApiPostgre.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoItemController : ControllerBase
{
TodoItemContext bd;
public TodoItemController(TodoItemContext context)
{
bd = context;
bd.Database.EnsureCreated();
}
[HttpGet("")]
public ActionResult<IEnumerable<TodoItem>> GetTodoItems()
{
return bd.TodoItems;
}
[HttpGet("{id}")]
public ActionResult<TodoItem> GetTodoItemById(int id)
{
var currentItem = bd.TodoItems.FirstOrDefault(p=> p.Id == id);
if(currentItem == null) return NotFound();
return currentItem;
}
[HttpPost("")]
public async Task PostTodoItem(TodoItem model)
{
bd.Add(model);
await bd.SaveChangesAsync();
}
[HttpPut("{id}")]
public async Task<IActionResult> PutTodoItem(int id, TodoItem model)
{
var currentItem = bd.TodoItems.FirstOrDefault(p=> p.Id == id);
if(currentItem == null) return NotFound();
currentItem.Title = model.Title;
currentItem.IsCompleted = model.IsCompleted;
await bd.SaveChangesAsync();
return NoContent();
}
[HttpDelete("{id}")]
public ActionResult<TodoItem> DeleteTodoItemById(int id)
{
return null;
}
}
}
6. ApsaraDB RDS es un servicio creado por alibaba cloud para alojar database como SQL Server, PostgreSQL y MySQL
Vamos a crear una nueva instancia de ApsaraDB RDS en Alibaba Cloud
seleccionar Create Instance
Puedes seleccionar suscription si quieres reservar a base de datos por largo tiempo y pagar un valor fijo. También puedes usar Pay as you go si solo desear usar la BD por tiempo especifico como para un demo o en general si deseas este tipo de pago.
Completa dandole click a Pay Now
7. Despues de esperar por la creación podemos ver en el modulo de instances nuestra instancia creada con un nombre o ID autogenerado, dale click al nombre para entrar en la configuración.
seleciona Create Account y escribe un usuario y un password, este seria el que usariamos para hacer login sobre la base de datos.
8. Ahora creamos una nueva base datos donde usamos la cuenta que hemos creada anteriormente
9. Finalmente, en Data security podemos agregar nuestra IP o 0.0.0.0/0 en la white list para poder acceder (Solamente debemos usar 0.0.0.0/0 para pruebas, por seguridad no debemos usarlo en producción)
10. Ahora ya podemos ir a la clase program y agregar la configuracion para poder conectar con postgreSQL (program.cs):
// Add services to the container.
builder.Services.AddDbContext<TodoItemContext>(options =>
options.UseNpgsql("server=myserver.pg.rds.aliyuncs.com;database=todoitems;user id=user_1;password=mypassword")
);
11. Ejecuta la API usando dotnet run o utiliza visual studio y todo deberia funcionar bien
Revisa el repo con este demo creado: github.com/Mteheran/dotnetapiapsaradb
Reblogueó esto en El Bruno.