Fritz.InstantAPIs
0.2.0-preview-2
See the version list below for details.
dotnet add package Fritz.InstantAPIs --version 0.2.0-preview-2
NuGet\Install-Package Fritz.InstantAPIs -Version 0.2.0-preview-2
<PackageReference Include="Fritz.InstantAPIs" Version="0.2.0-preview-2" />
paket add Fritz.InstantAPIs --version 0.2.0-preview-2
#r "nuget: Fritz.InstantAPIs, 0.2.0-preview-2"
// Install Fritz.InstantAPIs as a Cake Addin #addin nuget:?package=Fritz.InstantAPIs&version=0.2.0-preview-2&prerelease // Install Fritz.InstantAPIs as a Cake Tool #tool nuget:?package=Fritz.InstantAPIs&version=0.2.0-preview-2&prerelease
InstantAPIs
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 | Column2 |
---|---|
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:
Create a new minimal API, if you don't already have one:
dotnet new web -o DemoApi -f net6.0 cd DemoApi
Add a reference to
Fritz.InstantAPIs.dll
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();
Coming features
Support for:
- query parameters
- PUT
Community
This project is covered by a code of conduct that all contributors must abide by. Contributions are welcome and encouraged..
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Microsoft.EntityFrameworkCore (>= 6.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (1)
Showing the top 1 popular GitHub repositories that depend on Fritz.InstantAPIs:
Repository | Stars |
---|---|
csharpfritz/csharp_with_csharpfritz
Show notes, slides, and samples from the CSharp with CSharpFritz show
|
Version | Downloads | Last updated |
---|---|---|
0.2.0 | 1,431 | 3/22/2022 |
0.2.0-preview-3 | 213 | 2/27/2022 |
0.2.0-preview-2 | 182 | 2/24/2022 |
0.2.0-preview-1 | 217 | 2/23/2022 |
0.1.0 | 508 | 2/17/2022 |
v0.2.0
- Introduced a fluent configuration API for defining which tables to include and exclude from the Entity Framework Context.
- Added the ability to create APIs from JSON files on disk