컨트롤러 기반 API와 최소 API 중에서 선택
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
ASP.NET Core API를 만드는 두 가지 방법, 즉 컨트롤러 기반 접근 방식과 최소 API를 지원합니다. API 프로젝트의 컨트롤러는 .에서 ControllerBase파생되는 클래스입니다. 최소 API는 람다 또는 메서드에서 논리 처리기를 사용하여 엔드포인트를 정의합니다. 이 문서에서는 두 방법 간의 차이점을 설명합니다.
최소 API 디자인은 기본적으로 호스트 클래스를 숨기고 함수를 람다 식으로 사용하는 확장 메서드를 통해 구성 및 확장성에 중점을 둡니다. 컨트롤러는 생성자 주입 또는 속성 주입을 통해 종속성을 사용할 수 있는 클래스이며 일반적으로 개체 지향 패턴을 따릅니다. 최소 API는 서비스 공급자 액세스와 같은 다른 접근 방식을 통해 종속성 주입을 지원합니다.
컨트롤러를 기반으로 하는 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 프로젝트에서 동일한 기능을 제공합니다. 최소 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와 동일한 기능이 많이 있습니다. 여러 API로 스케일링하고, 복잡한 경로를 처리하고, 권한 부여 규칙을 적용하고, API 응답의 콘텐츠를 제어하는 데 필요한 구성 및 사용자 지정을 지원합니다. 최소 API에서 아직 지원되거나 구현되지 않은 컨트롤러 기반 API에서 사용할 수 있는 몇 가지 기능이 있습니다. 여기에는 다음이 포함됩니다.
- 모델 바인딩(IModelBinderProvider, IModelBinder)에 대한 기본 제공 지원이 없습니다. 사용자 지정 바인딩 shim을 사용하여 지원을 추가할 수 있습니다.
- 유효성 검사(IModelValidator)를 기본적으로 지원하지 않습니다.
- 애플리케이션 파트 또는 애플리케이션 모델을 지원하지 않습니다. 자체 규칙을 적용하거나 빌드할 수 있는 방법은 없습니다.
- 기본 제공 뷰 렌더링을 지원하지 않습니다. 뷰를 렌더링하는 데 Razor Pages를 사용하는 것이 좋습니다.
- JsonPatch를 지원하지 않습니다.
- OData를 지원하지 않습니다.
참고 항목
ASP.NET Core API를 만드는 두 가지 방법, 즉 컨트롤러 기반 접근 방식과 최소 API를 지원합니다. API 프로젝트의 컨트롤러는 .에서 ControllerBase파생되는 클래스입니다. 최소 API는 람다 또는 메서드에서 논리 처리기를 사용하여 엔드포인트를 정의합니다. 이 문서에서는 두 방법 간의 차이점을 설명합니다.
최소 API 디자인은 기본적으로 호스트 클래스를 숨기고 함수를 람다 식으로 사용하는 확장 메서드를 통해 구성 및 확장성에 중점을 둡니다. 컨트롤러는 생성자 주입 또는 속성 주입을 통해 종속성을 사용할 수 있는 클래스이며 일반적으로 개체 지향 패턴을 따릅니다. 최소 API는 서비스 공급자 액세스와 같은 다른 접근 방식을 통해 종속성 주입을 지원합니다.
컨트롤러를 기반으로 하는 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 프로젝트에서 동일한 기능을 제공합니다. 최소 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와 동일한 기능이 많이 있습니다. 여러 API로 스케일링하고, 복잡한 경로를 처리하고, 권한 부여 규칙을 적용하고, API 응답의 콘텐츠를 제어하는 데 필요한 구성 및 사용자 지정을 지원합니다. 최소 API에서 아직 지원되거나 구현되지 않은 컨트롤러 기반 API에서 사용할 수 있는 몇 가지 기능이 있습니다. 여기에는 다음이 포함됩니다.
- 모델 바인딩(IModelBinderProvider, IModelBinder)에 대한 기본 제공 지원이 없습니다. 사용자 지정 바인딩 shim을 사용하여 지원을 추가할 수 있습니다.
- 양식에서의 바인딩을 지원하지 않습니다. 여기에는 IFormFile 바인딩이 포함됩니다.
- 유효성 검사(IModelValidator)를 기본적으로 지원하지 않습니다.
- 애플리케이션 파트 또는 애플리케이션 모델을 지원하지 않습니다. 자체 규칙을 적용하거나 빌드할 수 있는 방법은 없습니다.
- 기본 제공 뷰 렌더링을 지원하지 않습니다. 뷰를 렌더링하는 데 Razor Pages를 사용하는 것이 좋습니다.
- JsonPatch를 지원하지 않습니다.
- OData를 지원하지 않습니다.
참고 항목
ASP.NET Core