APIs instantáneas en .NET

Instant APIs o APIs instantáneas es un concepto que nos permite generar todos los endpoints comunes que usa un modelo utilizando una librería y una simple configuración.

Para crear nuestra primera API instantánea necesitamos crear una minimal API o un proyecto web utilizando Visual studio dotnet CLI. Naveguemos a una carpeta para esta nueva API y ejecutemos el comando:

dotnet new web

Luego necesitamos instalar las bibliotecas NuGet requeridas para este proyecto, usaremos Entity Framework y Sqlite:

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Sqlite

Y para la API instantánea podemos usar la biblioteca creada por Jeff Fritz, Fritz.InstantAPIs.

dotnet add package Fritz.InstantAPIs --version 0.2.0

Ya estamos listos para la construir nuestro código. Dado que usaremos EF necesitamos crear un contexto y un modelo. En este caso, vamos a usar MyContext y el modelo ToDoItem, es posible añadirlo en el mismo Programa.cs en la parte inferior.

public class MyContext: DbContext {
    public MyContext(DbContextOptions < MyContext > options): base(options) {}
    public DbSet < ToDoItem > ToDoItems => Set < ToDoItem > ();
}
public class ToDoItem {
    public Guid Id {
        get;
        set;
    }
    public string Name {
        get;
        set;
    }
    public string Description {
        get;
        set;
    }
}

Luego de eso pasamos a configurar el contexto usando Sqlite:

builder.Services.AddSqlite<MyContext>("Data Source=ToDo.db");

Ahora que estamos listos para configurar nuestra API instantánea solo necesitamos agregar dos líneas para realizar esta configuración utilizando nuestro contexto:

builder.Services.AddInstantAPIs(); //To include the services for Instant Apis
app.MapInstantAPIs<MyContext>(); //map all the endpoints for this context

Así que finalmente nuestro programa.cs se verá así:

using Fritz.InstantAPIs;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqlite < MyContext > ("Data Source=ToDo.db");
builder.Services.AddInstantAPIs();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.MapInstantAPIs < MyContext > ();
app.Run();
public class MyContext: DbContext {
    public MyContext(DbContextOptions < MyContext > options): base(options) {}
    public DbSet < ToDoItem > ToDoItems => Set < ToDoItem > ();
}
public class ToDoItem {
    public Guid Id {
        get;
        set;
    }
    public string Name {
        get;
        set;
    }
    public string Description {
        get;
        set;
    }
}

En este punto, podemos ejecutar el proyecto y explorar swagger para ver todos los endpoints generados por la biblioteca Fritz.InstantAPIs

instant api

Por defecto tendremos el endpoint para obtener, obtener por id, crear, actualizar y eliminar elementos. Esta es una excelente manera de crear API realmente rápidas para pruebas de concepto, demostraciones, y probar nuevas librerías.

También podemos configurar la API como especificar qué métodos queremos crear para cada modelo, por ejemplo:

app.MapInstantAPIs<MyContext>(config =>
{
	config.IncludeTable(db => db.ToDoItems, ApiMethodsToGenerate.Get, "ToDoItems");
});

Podemos ejecutar el proyecto de nuevo y acceder a swager, y para este caso tendremos solo los métodos get.

Con este conocimiento, estamos listo para crear nuestra primera API instantánea y probar esta increíble herramienta. Podemos consultar el repositorio oficial de esta libreria en: https://github.com/csharpfritz/InstantAPIs

 Aquí encontraremos el código utilizado en este artículo