最小限の API をベースにした Web API
最小限の API は、ASP.NET Core で REST API を迅速に構築する方法であり、最小限のコードでフル機能の REST API を構築できます。たとえば、次の 3 行のコードは次のとおりです。
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();
Web サイトのルート ディレクトリ ノードをリクエストしたときに「Hello World!」を返すように実装できます。
このWeb APIの手法を利用すると、最小限の機能を備えたマイクロサービスやWebサイトを構築できます。
HTTPリクエストのマッピング
次のコードは、いくつかの HTTP リクエストの URL を Lambda 関数にマップします。
- HTTP GET、/todoitems、すべての todoitem を取得
- HTTP GET、/todoitems/complete、完了したすべての todoitem を取得します。
- HTTP GET、/todoitems/{id}、特定の ID の todoitem を取得します
- HTTP Post、/todoitems、todoitem を追加します
- HTTP PUT、/todoitems/{id}、特定の ID の todoitem を変更します
- HTTP DELETE、/todoitems/{id}、ID を持つ todoitem を削除します
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<TodoDb>(opt => opt.UseInMemoryDatabase("TodoList"));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
var app = builder.Build();
app.MapGet("/todoitems", async (TodoDb db) =>
await db.Todos.ToListAsync());
app.MapGet("/todoitems/complete", async (TodoDb db) =>
await db.Todos.Where(t => t.IsComplete).ToListAsync());
app.MapGet("/todoitems/{id}", async (int id, TodoDb db) =>
await db.Todos.FindAsync(id)
is Todo todo
? Results.Ok(todo)
: Results.NotFound());
app.MapPost("/todoitems", async (Todo todo, TodoDb db) =>
{
db.Todos.Add(todo);
await db.SaveChangesAsync();
return Results.Created($"/todoitems/{
todo.Id}", todo);
});
app.MapPut("/todoitems/{id}", async (int id, Todo inputTodo, TodoDb db) =>
{
var todo = await db.Todos.FindAsync(id);
if (todo is null) return Results.NotFound();
todo.Name = inputTodo.Name;
todo.IsComplete = inputTodo.IsComplete;
await db.SaveChangesAsync();
return Results.NoContent();
});
app.MapDelete("/todoitems/{id}", async (int id, TodoDb db) =>
{
if (await db.Todos.FindAsync(id) is Todo todo)
{
db.Todos.Remove(todo);
await db.SaveChangesAsync();
return Results.NoContent();
}
return Results.NotFound();
});
app.Run();