ASP.NET Core の最小限の API に基づく Web API

最小限の 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();

おすすめ

転載: blog.csdn.net/cuit/article/details/132612773