.NET 8/9 中的控制器与最小 API:您应该使用哪一个?

科技   2024-11-23 06:43   上海  


在 .NET 8 中,在控制器和最小 API 之间进行选择可能是一项挑战,尤其是随着 .NET Core 向更灵活的 API 开发体验发展。随着最小 API 的引入,开发人员可以更简单、更快速地构建 API,而无需使用完整的 MVC 框架。但是,Controller 仍然是更复杂项目的可靠选择。在本文中,我们将探讨这两种方法,比较它们的优势,并提供真实场景来帮助您做出明智的决策。

什么是 .NET 8 中的控制器?

定义:控制器是 ASP.NET Core MVC 框架的基本组成部分。它们允许开发人员使用结构化方法创建 RESTful API,其中每个控制器负责处理一组特定的 HTTP 请求。控制器通过将 API 划分为逻辑部分来促进关注点分离。

何时使用:在构建需要清晰组织、复杂路由、模型绑定以及支持过滤器和操作结果等功能的复杂应用程序时,请使用 Controller。

示例:下面是 .NET 8 中控制器的基本示例:

using Microsoft.AspNetCore.Mvc;

namespace MyApp.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet]
public IActionResult GetAllProducts()
{
var products = new List<string> { "Laptop", "Tablet", "Phone" };
return Ok(products);
}

[HttpGet("{id}")]
public IActionResult GetProductById(int id)
{
var product = $"Product {id}";
return Ok(product);
}

[HttpPost]
public IActionResult CreateProduct([FromBody] string product)
{
return CreatedAtAction(nameof(GetProductById), new { id = 1 }, product);
}
}
}

在此示例中,处理 GET 和 POST 请求,从而提供一种结构化的方式来管理产品数据。ProductsController

.NET 8 中的最小 API 是什么?

定义:最小 API 提供了一种在 .NET 8 中创建 API 的轻量级方法,而无需完整的 MVC 结构。它们通过减少样板代码来简化设置过程,使其成为小型应用程序或微服务的理想选择。

何时使用:对于较小的应用程序、微服务或需要快速设置的场景,请使用最少的 API。它们对于不需要 MVC 框架全部功能的 API 特别有用。

示例:下面是 .NET 8 中最小 API 的示例:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/products", () =>
{
return new List<string> { "Laptop", "Tablet", "Phone" };
});

app.MapGet("/products/{id}", (int id) =>
{
return $"Product {id}";
});

app.MapPost("/products", (string product) =>
{
return Results.Created($"/products/1", product);
});

app.Run();

此代码直接将 HTTP 路由映射到委托方法,从而降低了设置简单 API 的复杂性。

控制器与最小 API

实时场景:何时使用每个场景

场景 1:构建简单的微服务

  • 使用最少的 API:微服务通常具有集中的目的,不需要 MVC 的复杂性。最少的 API 允许您以最少的设置快速设置终端节点。

  • 示例:为城市提供实时天气更新的微服务。终端节点将很简单,例如 ./weather/city

app.MapGet("/weather/{city}", (string city) =>  
{
return $"Current weather in {city} is sunny.";
});

方案 2:开发复杂的多功能 Web 应用程序

  • 使用控制器:对于具有不同功能和更大代码库的应用程序,控制器可以提供更好的组织。

  • 示例:一个电子商务平台,其中每个方面(产品、订单、用户)都有自己的控制器,以便更好地分离关注点。

[ApiController]
[Route("api/orders")]
public class OrdersController : ControllerBase
{
[HttpGet("{id}")]
public IActionResult GetOrder(int id)
{
return Ok($"Order details for {id}");
}
}

场景 3:快速原型设计或 MVP 开发

  • 使用最少的 API:当速度对于开发概念验证或 MVP 至关重要时,最少的 API 提供了更快的设置。

  • 示例:快速设置 API 以测试用户对新功能的反馈。

app.MapPost("/feedback", (string feedback) =>  
{
return $"Feedback received: {feedback}";
});

场景 4:具有大量中间件和过滤器的 API

  • 使用 Controller:复杂的业务逻辑通常受益于 Controller 提供的过滤器、自定义操作结果和模型验证等功能。

  • 示例:需要验证请求并应用多个授权筛选条件的付款处理 API。

[Authorize]
[ApiController]
[Route("api/payments")]
public class PaymentsController : ControllerBase
{
[HttpPost]
public IActionResult ProcessPayment([FromBody] PaymentRequest request)
{
// Custom validation logic
return Ok("Payment processed");
}
}

场景 5:性能关键型低延迟应用程序

  • 使用最少的 API:对于每一毫秒都很重要的应用程序,例如高频交易平台,最少 API 的较低开销可能是有利的。

  • 示例:一个以最小延迟处理股票交易请求的 API。

app.MapPost("/trade", (string stockSymbol, int quantity) =>  
{
return $"Trade request for {quantity} shares of {stockSymbol} received.";
});

场景 6:大型开发团队

  • 使用 Controller:大型团队受益于 Controller 的结构化特性,使协作更加轻松。

  • 示例:一个银行应用程序,其中不同的团队处理用户管理、交易和报告。

控制器和最小 API 在 .NET 8 中都有其优势,但选择合适的 API 取决于您的项目需求。控制器为复杂的应用程序提供了一种结构化的方法,而 Minimal API 在需要速度和简单的场景中大放异彩。了解每种方法擅长的场景,可以让您为特定项目利用正确的工具。尝试这两种方法,找到最适合你的需求,并享受 .NET 8 提供的灵活性!

如果你喜欢我的文章,请给我一个赞!谢谢

架构师老卢
资深软件架构师, 分享编程、软件设计经验, 教授前沿技术, 分享技术资源(每天发布电子书),每天进步一点点...
 最新文章