注意
これは、この記事の最新バージョンではありません。 現在のリリースについては、 この記事の .NET 10 バージョンを参照してください。
警告
このバージョンの ASP.NET Core はサポート対象から除外されました。 詳細については、 .NET および .NET Core サポート ポリシーを参照してください。 現在のリリースについては、この記事の .NET 9 バージョンを参照してください。
ASP.NET Core には、HTTP API を構築するための 2 つの方法 ( 最小限の API と コントローラー ベースの API) が用意されています。 新しいプロジェクトでは、最小限 のコードと構成で API を構築するための簡略化された高パフォーマンスのアプローチを提供するため、最小限の API を使用することをお勧めします。
最小限の API - 新しいプロジェクトに推奨
ASP.NET Core を使用して高速 HTTP API を構築する場合は、最小限の API を使用することをお勧めします。 これにより、最小限のコードと構成で完全に機能 REST エンドポイントを構築できます。 API ルートとアクションを流暢に宣言することで、従来のスキャフォールディングをスキップし、不要なコントローラーを回避します。
Web アプリのルートに API を作成する簡単な例を次に示します。
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();
ほとんどの API は、ルートの一部としてパラメーターを受け入れます。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/users/{userId}/books/{bookId}",
(int userId, int bookId) => $"The user id is {userId} and book id is {bookId}");
app.Run();
最小限の API では、複数の API へのスケーリング、複雑なルートの処理、承認規則の適用、API 応答の内容の制御に必要な構成とカスタマイズがサポートされます。
最小限の API の概要
- チュートリアル: チュートリアル: ASP.NET Core を使用して最小限の API を作成する
- クイック リファレンス: 最小限の API クイック リファレンス
- 例: コード例を含む一般的なシナリオの完全な一覧については、「最小限の API」クイック リファレンスを参照してください。
コントローラー ベースの API - 代替アプローチ
ASP.NET Core では、コントローラーベースのアプローチもサポートされています。コントローラーは、 ControllerBaseから派生するクラスです。 この方法は、従来のオブジェクト指向パターンに従っており、次の場合に推奨される場合があります。
- 複雑なビジネス ロジックを持つ大規模なアプリケーション
- MVC パターンに精通しているチーム
- 特定の MVC 機能を必要とするアプリケーション
コントローラーに基づく API のサンプル コードを次に示します。
namespace APIWithControllers;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
}
}
using Microsoft.AspNetCore.Mvc;
namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
次のコードは、推奨される最小限の API アプローチを使用して同じ機能を提供します。
namespace MinimalAPI;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpsRedirection();
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", (HttpContext httpContext) =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
})
.ToArray();
return forecast;
});
app.Run();
}
}
どちらの API プロジェクトも、次のクラスを参照しています。
namespace APIWithControllers;
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
アプローチの選択
新しいプロジェクトの最小 API から始めます。 次のサービスが提供されます。
- よりシンプルな構文 - 定型コードが少ない
- パフォーマンスの向上 - コントローラーと比較してオーバーヘッドを削減
- 簡単なテスト - 簡略化された単体テストと統合テスト
- 最新のアプローチ - 最新の .NET 機能を活用
必要に応じて、コントローラー ベースの API を検討してください 。
- モデル バインドの拡張性 (IModelBinderProvider、 IModelBinder)
- 高度な検証機能 (IModelValidator)
- アプリケーション パーツ または アプリケーション モデル
- JsonPatch の サポート
- OData のサポート
これらの機能のほとんどは、カスタム ソリューションを使用して最小限の API に実装できますが、コントローラーではすぐに使用できます。
関連項目
- チュートリアル: ASP.NET Core を使用して最小限の API を作成する - 最小限の API チュートリアル
- 最小限の API クイック リファレンス - 最小限の API クイック リファレンス
- ASP.NET Core を使用して Web API を作成する - コントローラー ベースの API の概要
- チュートリアル: ASP.NET Core を使用してコントローラー ベースの Web API を作成 する - コントローラーベースの API チュートリアル
ASP.NET Core には、HTTP API を構築するための 2 つの方法 ( 最小限の API と コントローラー ベースの API) が用意されています。 新しいプロジェクトでは、最小限 のコードと構成で API を構築するための簡略化された高パフォーマンスのアプローチを提供するため、最小限の API を使用することをお勧めします。
最小限の API - 新しいプロジェクトに推奨
ASP.NET Core を使用して高速 HTTP API を構築する場合は、最小限の API を使用することをお勧めします。 これにより、最小限のコードと構成で完全に機能 REST エンドポイントを構築できます。
簡単な例を次に示します。
var app = WebApplication.Create(args);
app.MapGet("/", () => "Hello World!");
app.Run();
最小限の API の概要
- チュートリアル: チュートリアル: ASP.NET Core を使用して最小限の API を作成する
- クイック リファレンス: 最小限の API クイック リファレンス
コントローラー ベースの API - 代替アプローチ
コントローラーは、 ControllerBaseから派生するクラスです。 この方法は、従来のオブジェクト指向パターンに従います。
コントローラーに基づく API のサンプル コードを次に示します。
namespace APIWithControllers;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
}
}
using Microsoft.AspNetCore.Mvc;
namespace APIWithControllers.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
次のコードは、推奨される最小限の API アプローチを使用して同じ機能を提供します。
namespace MinimalAPI;
public class Program
{
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpsRedirection();
var summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
app.MapGet("/weatherforecast", (HttpContext httpContext) =>
{
var forecast = Enumerable.Range(1, 5).Select(index =>
new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = summaries[Random.Shared.Next(summaries.Length)]
})
.ToArray();
return forecast;
});
app.Run();
}
}
どちらの API プロジェクトも、次のクラスを参照しています。
namespace APIWithControllers;
public class WeatherForecast
{
public DateOnly Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
アプローチの選択
新しいプロジェクトの最小 API から始めます。 必要に応じて、コントローラー ベースの API を検討してください。
- モデル バインドの拡張性 (IModelBinderProvider、 IModelBinder)
- フォーム バインドのサポート (次を含む) IFormFile
- 高度な検証機能 (IModelValidator)
- アプリケーション パーツ または アプリケーション モデル
- JsonPatch の サポート
- OData のサポート
関連項目
- チュートリアル: ASP.NET Core を使用して最小限の API を作成する - 最小限の API チュートリアル
- 最小限の API クイック リファレンス - 最小限の API クイック リファレンス
- ASP.NET Core を使用して Web API を作成する - コントローラー ベースの API の概要
- チュートリアル: ASP.NET Core を使用してコントローラー ベースの Web API を作成 する - コントローラーベースの API チュートリアル
ASP.NET Core