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
반응형
'ASP.NET Core' 카테고리의 다른 글
.NET] .NET Framework, .NET Core, .NET Standard 정리 (0) | 2022.06.23 |
---|---|
.NET 6] user-secrets(secrets.json) 사용하여 ConnectionStrings 계정 관리하기 (0) | 2022.06.16 |
.NET 6] SignalR Server, SignalR Client App (0) | 2022.06.09 |
.NET Core] Request Pipeline - Run, Map, Use (0) | 2022.05.23 |
.NET 6 API with Redis] 4. API using Hashes Data Type (0) | 2022.05.18 |
댓글