본문 바로가기
ASP.NET Core

.NET 6] Minimal APIs VS MVC APIs 차이점

by Fastlane 2022. 6. 15.
728x90
반응형

출처 : https://www.youtube.com/watch?v=5YB49OEmbbE&t=5254s 

Minimal API란?

controller를 사용하지 않고, mvc framework를 사용하지도 않는다. 

ASP.NET Core에서 최소한의 파일만 포함하는 microservices 와 app을 위한 개념이다. 

 

Minimal APIs 과 MVC APIs의 차이점:

  • model validation을 제공하지 않는다. 
  • JSONPatch를 제공하지 않는다. 
  • filters를 제공하지 않는다. 
  • Custom model binding을 제공하지 않는다. 

Minimal APIs vs MVC APIs :  API 함수 추가하는 방식의 차이를 알아보자. 

MVC API : Controller 파일에 api 함수를 추가한다.  

    public class ValuesController : ApiController
    {
        [HttpGet]
        public IHttpActionResult Get()
        {
            return Ok("Hello World!");
        }
    }

 

Minimal API : Program.cs 파일에 Map확장메서드를 사용하여 route를 지정하고, middleware를 추가한다. 

var builder = WebApplication.CreateBuilder(args);

// Setup Services
var app = builder.Build();

// Add Middleware
// Map APIs
app.MapGet("/", () => "Hello World!");

// Start the Server
app.Run();

 

Top-Level의 함수로 api를 정의하고 싶지 않다면, UseEndPoints를 호출하여 delegate에 MapGet함수를 정의할 수 있다.  

app.UseEndpoints(endpoints =>
{
    endpoints.MapGet("/", () => "Hello World!");
});

Minimal APIs vs MVC APIs :  IRepository 사용 방식의 차이를 알아보자. 

MVC API : Controller의 Constructor에서 의존성 주입하여 사용한다. 

    [ApiController]
    public class CommandsController : ControllerBase
    {
        private readonly ICommandRepo _repo;
        private readonly IMapper _mapper;

        public CommandsController(ICommandRepo repo, IMapper mapper)
        {
            _repo = repo;
            _mapper = mapper;
        }

        [HttpGet("{id}", Name = "GetCommandById")]
        public async Task<ActionResult<CommandReadDto>> GetCommandById(int id)
        {
            var commandModel = await _repo.GetCommandById(id);
            if (commandModel != null)
            {
                return Ok(_mapper.Map<CommandReadDto>(commandModel));
            }
            return NotFound();
        }
    }

Minimal API : Program.cs 파일에 Services를 등록하고,  lambda expression parameters에 추가하면 된다. 

var builder = WebApplication.CreateBuilder(args);

// Setup Services
builder.Services.AddScoped<ICommandRepo, CommandRepo>();
builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

var app = builder.Build();

// Add Middleware
// Map APIs
app.MapGet("api/v1/Commands/{id}", async (ICommandRepo repo, IMapper mapper, int id) =>
{
    var command = await repo.GetCommandById(id);
    if (command != null)
    {
        return Results.Ok(mapper.Map<CommandReadDto>(command));
    }
    return Results.NotFound();
});

// Start the Server
app.Run();

결론

Minimal API는 간단한 API project를 개발할 수 있는 좋은 선택이 될 수 있다. 프로젝트의 규모가 커지면서 controller기반의 MVC API로 변경할 수 있다. 

 

 

728x90
반응형

댓글