Skip to content

A library that generates Minimal API endpoints for an Entity Framework context.

License

Notifications You must be signed in to change notification settings

stephen-net/InstantAPIs

 
 

Repository files navigation

InstantAPIs

Nuget GitHub branch checks state GitHub last commit GitHub contributors

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.

DbContext based API

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.

Demo

Check out Fritz giving a demo, showing the advantage of InstantAPIs on YouTube: https://youtu.be/vCSWXAOEpBo

A JSON based API

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}

Demo

To use this, do the following:

  1. Create a new minimal API, if you don't already have one:

    dotnet new web -o DemoApi -f net6.0
    cd DemoApi 
  2. Add the NuGet package for Fritz.InstantAPIs:

    dotnet add package Fritz.InstantAPIs --prerelease
  3. In Program.cs, add the following namespace:

    using Mock;
  4. Create a file mock.json and give it for example the following content:

    {
       "products" : [{
         "id": 1,
         "name": "pizza"
       }]
     }
  5. 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();

Coming features

Support for:

Community

This project is covered by a code of conduct that all contributors must abide by. Contributions are welcome and encouraged..

About

A library that generates Minimal API endpoints for an Entity Framework context.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 100.0%