This article contains two different ways to get an instant API:
- An API based on a
DbContext
, it will generate the routes it needs given a database class. - An API based on a JSON file.
A proof-of-concept library that generates Minimal API endpoints for an Entity Framework context.
For a given Entity Framework context, MyContext
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options) : base(options) {}
public DbSet<Contact> Contacts => Set<Contact>();
public DbSet<Address> Addresses => Set<Address>();
}
We can generate all of the standard CRUD API endpoints using this syntax in Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSqlite<MyContext>("Data Source=contacts.db");
var app = builder.Build();
app.MapInstantAPIs<MyContext>();
app.Run();
Now we can navigate to /api/Contacts
and see all of the Contacts in the database. We can filter for a specific Contact by navigating to /api/Contacts/1
to get just the first contact returned. We can also post to /api/Contacts
and add a new Contact to the database. Since there are multiple DbSet
, you can make the same calls to /api/Addresses
.
Check out Fritz giving a demo, showing the advantage of InstantAPIs on YouTube: https://youtu.be/vCSWXAOEpBo
An API will be generated based on JSON file, for now it needs to be named mock.json.
A typical content in mock.json looks like so:
{
"products" : [{
"id": 1,
"name": "pizza"
}, {
"id": 2,
"name": "pineapple pizza"
}, {
"id": 3,
"name": "meat pizza"
}],
"customers" : [{
"id": 1,
"name": "customer1"
}]
}
The above JSON will create the following routes:
HTTP Verb | Endpoint |
---|---|
GET | /products |
GET | /products/{id} |
POST | /products |
DELETE | /products/{id} |
GET | /customers |
GET | /customers/{id} |
POST | /customers |
DELETE | /customers/{id} |
To use this, do the following:
-
Create a new minimal API, if you don't already have one:
dotnet new web -o DemoApi -f net6.0 cd DemoApi
-
Add the NuGet package for Fritz.InstantAPIs:
dotnet add package Fritz.InstantAPIs --prerelease
-
In Program.cs, add the following namespace:
using Mock;
-
Create a file mock.json and give it for example the following content:
{ "products" : [{ "id": 1, "name": "pizza" }] }
-
Now add the following code for the routes to be created:
app.UseJsonRoutes();
Here's an example program:
using Mock;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.UseJsonRoutes();
app.Run();
Support for:
This project is covered by a code of conduct that all contributors must abide by. Contributions are welcome and encouraged..