다음을 통해 공유


API 개요

참고

이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 10 버전을 참조하세요.

경고

이 버전의 ASP.NET Core는 더 이상 지원되지 않습니다. 자세한 내용은 .NET 및 .NET Core 지원 정책을 참조 하세요. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.

ASP.NET Core는 HTTP API를 빌드하기 위한 두 가지 방법인 최소 API 및 컨트롤러 기반 API를 제공합니다. 새 프로젝트의 경우 최소 코드 및 구성으로 API를 빌드하기 위한 간소화된 고성능 접근 방식을 제공하므로 최소 API를 사용하는 것이 좋습니다.

최소 API는 ASP.NET Core를 사용하여 빠른 HTTP API를 빌드하는 데 권장되는 방법입니다. 이를 통해 최소한의 코드와 구성으로 완벽하게 작동하는 REST 엔드포인트를 빌드할 수 있습니다. 기존 스캐폴딩을 건너뛰고 API 경로 및 작업을 유창하게 선언하여 불필요한 컨트롤러를 방지합니다.

다음은 웹앱의 루트에 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 시작

컨트롤러 기반 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를 고려합니다.

이러한 기능의 대부분은 사용자 지정 솔루션을 사용하여 최소 API에서 구현할 수 있지만 컨트롤러는 기본 제공 기능을 제공합니다.

참조

ASP.NET Core는 HTTP API를 빌드하기 위한 두 가지 방법인 최소 API 및 컨트롤러 기반 API를 제공합니다. 새 프로젝트의 경우 최소 코드 및 구성으로 API를 빌드하기 위한 간소화된 고성능 접근 방식을 제공하므로 최소 API를 사용하는 것이 좋습니다.

최소 API는 ASP.NET Core를 사용하여 빠른 HTTP API를 빌드하는 데 권장되는 방법입니다. 이를 통해 최소한의 코드와 구성으로 완벽하게 작동하는 REST 엔드포인트를 빌드할 수 있습니다.

다음은 간단한 예제입니다.

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

최소 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를 고려합니다.

참조