使用 .NET 9 的最小 Web API

发布:2024-11-28 15:22 阅读:116 点赞:0

REST API 简介

REST,全称为Representational State Transfer(表现层状态转移),是一种架构风格,定义了一组规则来创建Web服务。在客户端与服务器通信时,REST建议创建一个对象来表示客户端请求的数据,并将该对象的状态发送给用户作为响应。例如,如果用户请求在班加罗尔某个时间和地点预订出租车,服务器端可以创建一个对象来表示这个请求,并将对象的状态发送给用户。因此,REST被称为表现层状态转移。

REST API 的原则

以下是REST的六个指导原则:

无状态

URL用于唯一标识资源,请求体包含所请求资源的状态。服务器处理请求后,通过响应体、状态码或头部将响应发送给客户端。客户端发送的每个请求都包含服务器理解请求所需的所有信息,这些信息可以是URL的一部分、查询字符串参数、请求体或头部。服务器API不缓存任何状态,因此每个请求都是相互独立的。这种REST行为还有助于在云环境中扩展API服务。

客户端-服务器

客户端-服务器架构实现了统一的接口,并将客户端与服务器分离。这提高了跨多个平台的可移植性以及服务器组件的可扩展性。

统一接口

为了在整个应用程序中实现统一性,REST有以下四个接口约束:

  • 资源标识
  • 使用表示来操作资源
  • 自描述消息
  • 超媒体作为应用状态的引擎

可缓存

为了提高性能,应用程序通常被设计为可缓存的。这是通过将服务器的响应标记为可缓存或不可缓存来实现的,无论是隐式还是显式。如果响应被拒绝为可缓存,则客户端缓存可以将来重用响应数据以响应等效请求。

.NET 中的最小API

在.NET 9、.NET 8或.NET 7中,最小API被设计为创建具有最小依赖性的HTTP API。它们非常适合微服务和希望仅包含最少文件、功能和依赖项的ASP.NET Core应用程序。

最小API的限制

  • 不支持过滤器,例如IAsyncAuthorizationFilter、IAsyncActionFilter等。
  • 不支持模型绑定,即IModelBinderProvider、IModelBinder。可以通过自定义绑定垫片添加支持。
  • 不支持表单绑定,包括IFormFile。计划将来添加对IFormFile的支持。
  • 没有内置的验证支持,即IModelValidator。
  • 不支持应用程序部分或应用程序模型。没有办法应用或构建自己的约定。
  • 没有内置视图渲染支持。建议使用Razor Pages来渲染视图。
  • 不支持JsonPatch。
  • 不支持OData。
  • 不支持ApiVersioning。

REST API 示例

REST API遵循标准的HTTP动词,如GET、POST、PUT、DELETE和PATCH,这些基本上是对对象进行CRUD操作。API被安排形成一个互联网资源。例如,在上面的示例中,我们有一个资源“todoitem”,可以使用API创建、修改和删除,并相应地形成URL格式。

using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// 添加服务到容器
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext(opt => opt.UseInMemoryDatabase("TodoList"));
var app = builder.Build();
// 配置HTTP请求管道
if (app.Environment.IsDevelopment()) {
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.MapGet("/", () => "Hello World!");
app.MapGet("/todoitems"async (TodoDb db) => await db.Todos.ToListAsync());
// ... 其他路由配置
class Todo {
    public int Id { getset; }
    public string? Name { getset; }
    public bool IsComplete { getset; }
}
class TodoDb : DbContext {
    public TodoDb(DbContextOptions options) : base(options) {}
    public DbSet Todos => Set();
}

结论

REST架构风格提供了一种在互联网上安排资源的标准化方式,以及客户端访问和获取服务器数据的通用方式。最小API需要最少的代码,并且是一种快速简便的方法来创建API,这些API不需要身份验证或位于具有身份验证的网关后面,并且具有非常少的依赖性。