Published
- 2 min read
How to create .net Minimal API
Introduction
สำหรับคนที่อยากเปลี่ยนมาใช้ Mininal API แต่มี API จำนวนมาก และไม่อยากเขียน Code กองรวมกันที่ไฟล์ Program.cs สามารถใช้การสร้าง Interface ไว้ แล้ว Register Service ทุกตัวที่ Implement Interface นี้ได้จาก
app.Services.GetServices<IAPI>();
- Create APIs Folder in server project.
mkdir APIs
- Create Interface IAPI.cs file in /APIs folder
// /APIs/IAPI.cs
namespace ProjectName.APIs;
public interface IAPI
{
public void Register(WebApplication app);
}
- Create API with Implement IAPI Interface
// /APIs/SampleAPI.cs
namespace ProjectName.APIs;
public class SampleAPI : IAPI
{
const string path = "/api/sample";
public void Register(WebApplication app)
{
app.MapGet(path, Get);
app.MapGet($"{path}/{{id}}", GetByID);
app.MapPost(path, Post);
app.MapPut($"{path}/{{id}}", Put);
app.MapDelete($"{path}/{{id}}", Delete);
}
}
- Create Get, GetByID, Post, Put, Delete Method.
// /APIs/SampleAPI.cs
public class SampleAPI : IAPI
{
// ...
async Task<IResult> Get(/* params */)
{
// ...
return Results.Ok(data);
}
async Task<IResult> GetById(long id, /* params */)
{
// ...
return Results.Ok(data);
}
async Task<IResult> Post(/* params */)
{
// ...
return Results.Created($"{path}/{id}", data);
}
async Task<IResult> Put(long id, /* params */)
{
// ...
return Results.Accepted($"{path}/{id}", data);
}
async Task<IResult> Delete(long id, /* params */)
{
// ...
return Results.NoContent();
}
}
- Register Service in Program.cs
// /Program.cs
// ...
builder.Services.AddTransient<IAPI, SampleAPI>();
var app = builder.Build();
// ...
ห้ามลืม กรณีมีการเพิ่ม Class XxxAPI ใหม่เข้ามาต้องนำมาเพิ่มที่นี่ด้วยทุกครั้ง
- Call GetService() and call each api.Register(app)
// /Program.cs in server project.
// ...
var apis = app.Services.GetServices<IAPI>();
foreach (var api in apis)
{
if (api is null) throw new InvalidProgramException("API not found");
api.Register(app);
}
// ...
app.Run();
เพียงเท่าที่คุณก็จะสามารถสร้าง API จำนวนมากได้ โดยไม่ต้องกองทุกสิ่งอย่างไว้ที่ Program.cs แล้ว