首页
/ FastEndpoints v6.1 版本发布:API开发框架的重大更新

FastEndpoints v6.1 版本发布:API开发框架的重大更新

2025-06-11 11:50:38作者:郁楠烈Hubert

项目简介

FastEndpoints 是一个高性能、轻量级的 ASP.NET Core API 开发框架,它简化了现代Web API的开发流程,提供了强大的路由、验证、文档生成等功能。该框架以其简洁的API设计和卓越的性能著称,特别适合需要快速开发和高效运行的微服务场景。

v6.1 版本亮点

1. 端点名称便捷获取

新版本引入了获取自动生成端点名称的便捷方法,这对于需要动态生成链接的场景特别有用。开发者现在可以通过简单的静态方法调用获取端点名称:

var endpointName = IEndpoint.GetName<SomeEndpoint>();

这个改进使得在使用ASP.NET Core的LinkGenerator类创建链接时更加方便,无需手动维护端点名称字符串,减少了出错的可能性。

2. 路由测试中的自动头部填充

在测试带有头部参数的端点时,v6.1版本简化了测试流程。考虑以下请求DTO:

sealed class Request
{
    [FromHeader]
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

现在测试时,只需提供DTO实例,框架会自动处理头部参数:

var (rsp, res) = await App.Client.POSTAsync<MyEndpoint, Request, string>(
                     new()
                     {
                         Title = "Mrs.",
                         FirstName = "Doubt",
                         LastName = "Fire"
                     });

这一改进显著简化了测试代码,提高了测试的可读性和可维护性。如果不需要此行为,也可以通过参数显式禁用。

3. CSV格式的集合参数绑定

v6.1增加了对逗号分隔值(CSV)格式的集合参数绑定支持。对于如下DTO:

public class FindRequest
{
    [QueryParam]
    public string[] Status { get; set; }
}

现在可以直接使用CSV格式的查询参数:

/find?status=queued,completed

这个特性使得API更加灵活,兼容更多客户端调用方式,特别是那些不支持复杂查询参数格式的简单客户端。

4. 新增Accepted响应方法

为了完善HTTP状态码支持,v6.1新增了SendAcceptedAtAsync()方法,用于发送202 Accepted响应:

await SendAcceptedAtAsync<ProgressEndpoint>(new { Id = "123" });

这与现有的201 Created响应方法形成互补,为异步处理场景提供了更好的支持。

5. 错误处理的增强

ThrowError()方法新增了支持错误代码和严重级别的重载:

ThrowError("Account is locked out!", errorCode: "AccountLocked", severity: Severity.Error, statusCode: 423);

这使得错误响应更加结构化,便于客户端程序化处理不同类型的错误。

6. 默认值绑定行为的配置

对于可为空的值类型属性,v6.1允许配置空参数值的绑定行为。考虑以下DTO:

public class MyRequest
{
    [QueryParam]
    public int? Age { get; set; }
}

通过新配置项可以控制当收到空参数时的行为:

app.UseFastEndpoints(c => c.Binding.UseDefaultValuesForNullableProps = false)

当设置为false时,空参数将使属性保持null,而不是赋默认值。这为不同场景下的参数处理提供了更大的灵活性。

其他重要改进

配置组与刷新令牌服务的兼容性

现在可以将刷新令牌服务端点纳入配置组中管理,使得认证相关的端点可以统一配置:

public class AuthGroup : Group
{
    public AuthGroup()
    {
        Configure("users/auth", ep => ep.Options(x => x.Produces(401)));
    }
}

public class UserTokenService : RefreshTokenService<TokenRequest, TokenResponse>
{
    public MyTokenService(IConfiguration config)
    {
        Setup(
            o =>
            {
                o.Endpoint("refresh-token", ep => 
                  { 
                    ep.Summary(s => s.Summary = "this is the refresh token endpoint");
                    ep.Group<AuthGroup>();
                  });
            });
    }
}

Swagger示例值的多来源支持

Swagger文档现在可以从多个来源获取请求参数的示例值:

Summary(
    s => s.ExampleRequest = new()
    {
        Name = "jane doe"
    });

如果同时提供了XML注释和摘要示例,后者将优先使用,为API文档提供了更灵活的示例值管理方式。

问题修复

  1. 修复了反射源生成器在处理带有required[JsonIgnore]属性的DTO时的编译错误问题。

  2. 修复了全局配置器中ClearDefaultProduces()失效的问题,恢复了从全局配置清除默认生成内容类型的能力。

  3. 修正了在使用NotNull()NotEmpty()验证器时OAS3规范生成不正确的问题,确保了复杂嵌套对象的验证规则能正确反映在API文档中。

技术价值

FastEndpoints v6.1的这些更新体现了框架对开发者体验的持续关注。从简化测试流程到增强API文档生成,再到提供更灵活的参数处理方式,每个改进都旨在减少样板代码,提高开发效率。特别是对OData的初步支持,展示了框架向更广泛API场景扩展的雄心。

这些变化使得FastEndpoints在保持高性能的同时,进一步提升了开发便利性和API设计的表达能力,为构建现代化、文档完善、易于测试的Web API提供了更强大的工具集。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K