Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于 .NET 6 的轻量级 Webapi 框架 FastEndpoints

基于 .NET 6 的轻量级 Webapi 框架 FastEndpoints

作者头像
全球技术精选
发布于 2022-09-05 08:12:20
发布于 2022-09-05 08:12:20
93600
代码可运行
举报
文章被收录于专栏:全球技术精选全球技术精选
运行总次数:0
代码可运行

大家好,我是等天黑。

FastEndpoints 是一个基于 .NET 6 开发的开源 webapi 框架,它可以很好地替代 .NET Minimal APIs 和 MVC ,专门为开发效率而生,带来了全新的开发模式和编码体验。

另外对于 .NET 的中间件、认证、授权、日志,依赖注入这些也都是支持的,甚至有些还进行了加强,所以你很快就可以上手它。

小试牛刀

接下来,我将用 FastEndpoints 创建一个 webapi 应用,展示它是如何使用的,真的非常简单。

创建一个新项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet new web -n MyWebApp

进入项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd MyWebApp

安装 Nuget 包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dotnet add package FastEndpoints

更新 Program.cs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
global using FastEndpoints;

var builder = WebApplication.CreateBuilder();
builder.Services.AddFastEndpoints();

var app = builder.Build();
app.UseAuthorization();
app.UseFastEndpoints();
app.Run(); 

添加一个 Request DTO

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyRequest
{
    public int Age { get; set; }

    public string Name { get; set; }
}

添加一个 Response DTO

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyResponse
{
    public int Id { get; set; }
    public int Age { get; set; }

    public string Name { get; set; }

    public DateTime CreateTime { get; set; }
}

添加一个 Endpoint Class

然后添加下面的代码, 这是处理业务逻辑的地方

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyEndpoint : Endpoint<MyRequest>
{
    public override void Configure()
    {
        Post("/api/user/create");
        AllowAnonymous();
    }

    public override async Task HandleAsync(MyRequest req, CancellationToken ct)
    {
        var response = new MyResponse()
        {
            Id = 1,
            Age = req.Age,
            Name = req.Name,
            CreateTime = DateTime.Now 
                
        };

        await SendAsync(response);
    }
}

准备工作都好了,直接启动我们的 webapi 项目。

然后用 Postman 或者其他工具,向 /api/user/create 端点发送 POST 请求。

创建了一个用户,并返回了用户信息,就是这么简洁,这就是 FastEndpoints。

你可能注意到了上面的 Configure()方法,指定了 Http 动词和端点。当然,你也可以使用 .NET 原生的特性的方式,这也是支持的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[HttpPost("/my-endpoint")]
[Authorize(Roles = "Admin,Manager")]
public class UpdateAddress : Endpoint<MyRequest, MyResponse>
{
    public override async Task HandleAsync(MyRequest req, CancellationToken ct)
    {
        await SendAsync(new MyResponse { });
    }
}

依赖注入

在 FastEndpoints 中,可以使用三种方式来访问 IOC 容器中注册的服务。

假设我们有一个 HelloWorldService 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface IHelloWorldService
{
    string SayHello();
}

public class HelloWorldService : IHelloWorldService
{
    public string SayHello() => "hello world!";
}

并且注册到 IOC 容器中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
builder.Services.AddScoped<IHelloWorldService, HelloWorldService>();

1. 构造函数注入

这是我们最熟悉的也是使用最多的方式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyEndpoint : EndpointWithoutRequest
{
    private IHelloWorldService _helloService;

    public MyEndpoint(IHelloWorldService helloScv)
    {
        _helloService = helloScv;
    }

    public override void Configure()
    {
        Get("/api/hello-world");
    }

    public override async Task HandleAsync(CancellationToken ct)
    {
        await SendAsync(_helloService.SayHello());
    }
}

2. 属性注入

服务实例可以通过属性的方式进行自动注入。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyEndpoint : EndpointWithoutRequest
{
    public IHelloWorldService HelloService { get; set; }

    public override void Configure()
    {
        Get("/api/hello-world");
    }

    public override async Task HandleAsync(CancellationToken ct)
    {
        await SendAsync(HelloService.SayHello());
    }
}

3. 手动解析

也可以像下面这样,直接手动获取服务。

使用 TryResolveResolve() 方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public override async Task HandleAsync(CancellationToken ct)
{
    IHelloWorldService? helloSvc = TryResolve<IHelloWorldService>();

    if (helloSvc is null)
        ThrowError("service not resolved!");

    var logger = Resolve<ILogger<MyEndpoint>>();

    logger.LogInformation("hello service is resolved...");

    await SendAsync(helloSvc.SayHello());
}

预先解析的服务

下面的三个服务已经预先解析过,我们可以直接在处理程序中使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
property: Config
service : IConfiguration

property: Env
service : IWebHostEnvironment

property: Logger
service : ILogger

非常方便地使用它们。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public override async Task HandleAsync(CancellationToken ct)
{
    Logger.LogInformation("this is a log message");
    var isProduction = Env.IsProduction();
    var smtpServer = Config["SMTP:HostName"];
    ...
}

架构模式

如果你写过 Go Web,你会发现这是何等的相似。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, you've requested: %s\n", r.URL.Path)
    })

    http.ListenAndServe(":80", nil)
}

FastEndpoints 遵循了 REPR 设计 (Request-Endpoint-Response),这和我们常说的 MVC 模式是不一样的。

思考一下,如果后端只是一个 webapi 应用,没有 View, 那它就变成了 MC 架构 。是不是很奇怪,那为什么不用 REPR 模式呢?

从另外一个角度上说,“分层架构” 是我们很熟悉和经常使用的,代码被分成不同的层。

这样的好处也是显而易见的。它们以解耦的方式组合在一起,在需要时,我们可以很方便的替换其中的层。

还有一种架构称为 “垂直切片架构", 系统的每个组件都是单独的一块,彼此并不影响,就像微服务那样。

而 FastEndpoints 正是使用了下面的 “垂直切片架构"。

总结

如您所见,FastEndpoints 是一个灵活高效的 webapi 框架。另外它还有其他的功能,比如异常处理,集成和单元测试,限流,API 版本控制等等。

希望对您有用!

文档: https://fast-endpoints.com/

Github: https://github.com/FastEndpoints

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 半栈程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
腾讯 TAPD DevOps 开放生态最佳实践
大家上午好,我是来自腾讯TEG的周仕林,今天主要跟大家分享的主题是腾讯TAPD DevOps开放生态最佳实践。我将从三方面做分享:
TAPD敏捷研发
2020/12/07
2.1K1
腾讯 TAPD DevOps 开放生态最佳实践
腾讯会议后台研发效能提升之路
从字面上看,研发效能追求的是“效率”,但是脱离目标谈效率是没有意义的。从研发的角度看,软件的意义就是交付用户和客户的所需,从而产生价值。因此,研发效能就是更快地为软件的用户或客户交付价值。这里的价值包括以下几个方面。 有效性:让业务交付的服务与客户的需求及市场更加匹配,即对不对的问题。 质量:提升业务的安全性和可靠性、用户体验等,即好不好的问题。 效率:提升研发运维和变更的效率,即快不快的问题。 2021 年,腾讯 CSIG 技术委员会成立了研发效能提升组,基于腾讯云的技术标准化,以CODING 为底座,建
博文视点Broadview
2023/04/04
1.8K0
腾讯会议后台研发效能提升之路
腾讯会议后台研发效能提升之路
---- 本文摘录于 《软件研发效能权威指南》 作者:周桂明 腾讯会议高级架构,腾讯云与智慧产业事业群 DevOps 与研发效能架构师 从字面上看,研发效能追求的是“效率”,但是脱离目标谈效率是没有意义的。从研发的角度看,软件的意义就是为用户和客户交付他们的所需,从而产生价值。因此,研发效能就是更快地为软件的用户或客户交付价值。这里的价值包括几个方面: 有效性:让业务交付的服务和客户的需求及市场更加匹配,即对不对的问题。 质量:提升业务的安全性和可靠性、用户体验等,即好不好的问题。 效率:提升研发运维和
腾讯云 CODING
2022/11/18
3.1K0
腾讯会议后台研发效能提升之路
从流水线到生产线:解读腾讯敏捷研发核心驱动力
腾讯始终秉承着敏捷迭代,小步快跑的理念,快速准确高质量的交付用户价值。腾讯是如何通过不断的演进来提升交付能力的?本文将为大家介绍腾讯DevOps的演进过程。
TAPD敏捷研发
2020/12/18
1.5K1
从流水线到生产线:解读腾讯敏捷研发核心驱动力
巧用TAPD自动化助手,get腾讯研发提效秘籍
日常工作中,面对工作流程中事务性强、繁琐复杂的工作,例如人工催进度,项目异常预警等,都需要一个可以解放双手,提高办公效率的智能工具平台。 今天,就来给大家介绍一下,在腾讯是如何通过TAPD「自动化助手」帮助大家从繁琐&重复的事务型工作中解放出来,专注主线,提升效率。 腾讯研发管理的秘密武器 自动化助手是TAPD推出的业务规则平台,提供开放灵活的规则指令,简洁易用的配置,用 「触发条件 + 执行动作」 的方式进行规则编排和执行。作为腾讯研发管理的秘密武器,TAPD自动化助手帮助处理繁琐流程,提升跨平台
TAPD敏捷研发
2021/05/17
2.7K0
TAPD如何实现项目自动化管理?
Tencent Agile Product Development, 腾讯自研的协作及软件研发管理平台,腾讯13年敏捷研发文化、流程和实践的沉淀,能够帮助企业提升研发效能和软件研发能力。TAPD目前是国内研发管理领域的领头产品,腾讯每一款成功产品都离不开TAPD的支持,目前也对外服务了超百万的用户,并多次斩获国家级奖项。
阿那个沫
2022/08/29
2.8K2
TAPD如何实现项目自动化管理?
程序员怎么用TAPD | 这些必备技能,让你的研发更高效!
在日常工作中,TAPD与流水线、代码仓库是研发团队高频使用的工具。对开发、测试同学来说,如果能实现平台间的信息打通,可以减少平台间的跳转切换,有效提升工作的效率。 TAPD第三方服务集成能力,支持与代码仓库、流水线进行了深度打通,力求为开发团队提供流畅高效的使用体验。我们梳理了一份攻略,掌握下面几个小技能,让TAPD与代码仓库、流水线一起,成为研发团队的得力助手,让开发工作提质增效! 代码紧密关联,研发管理更高效 TAPD与腾讯工蜂、Gitlab等代码仓库进行了深度打通,管理员需要在 「公司管理 -
TAPD敏捷研发
2021/08/12
2.2K0
TAPD焕新出发 | 极致体验,即刻开启
TAPD,专为满足团队高效协作而设计。历经十余年的探索与实践,我们始终致力于打造领先、高效、便捷的协作产品。在不断迭代更新中,TAPD迎来全新的升级改版,以全面助力、轻松协作为前提,从slogan到界面设计,再到功能优化全面焕新。
TAPD敏捷研发
2024/02/02
2940
TAPD焕新出发 | 极致体验,即刻开启
自动化助手用起来,研发效率翻个倍!
一个需求从规划、研发到测试上线,有些环节总需要手动操作,怎样才能从这些重复性的事务中解放出来? 让TAPD自动化助手来帮你!两分钟快速上手自动化助手,轻松配置自动化规则,让研发流程从此告别繁琐。 研发自动化,省力又高效  1   需求规划阶段 | 规则一:需求排期确定,自动流转状态 一个需求,要历经评审会、IPM迭代计划会等层层考验才能确定排期。当排期确定,如果需求能自动更新状态,并自动知会相关成员,会极大提升协作的效率。 想达成上述效果,只需一条自动化规则:当需求的 「预计开始」、「结束时间」或「迭代」等
TAPD敏捷研发
2022/08/29
7360
自动化助手用起来,研发效率翻个倍!
TAPD×腾讯会议,让协作与沟通无缝衔接!
开会,是我们离不开的沟通方式。无论是问题讨论、信息同步还是异地协作,企业和团队经常要面对频繁且多元的会议场景。 现在,TAPD和腾讯会议深度集成啦!带给团队更流畅,更便捷的协作沟通体验。下面就让我们看看,与腾讯会议关联后,TAPD如何让研发协作与会议沟通紧密衔接! 腾讯会议是一款高清流畅、便捷易用、安全可靠的云视频会议产品,支持手机、电脑、小程序灵活入会,可以为企业用户提供一站式云视频会议解决方案,全面提升企业沟通协作效率。 TAPD×腾讯会议 开启高效会议协作 腾讯会议现已上架TAPD开放平
TAPD敏捷研发
2021/07/19
1.4K0
赢天下,技不凡:小赢科技与TAPD奏出最美和弦 | TAPD经验谈
小赢与TAPD的缘分,是从2015年6月项目X5落地开始的,那时的小赢创业不到一年,公司只有50人左右。 随后,TAPD一直陪伴和见证小赢的每一步成长,小赢从不足百人发展到千人,项目也达到了20个。 终于,小赢上市,迈入新历程! 回顾往事,我们与TAPD一起迭代、蜕变、进取,上市也仅仅是新的开始。 那时,我们的业务涉及客户端、前端、后台逻辑,项目过程全部通过个人微信,信息获取及管理、沟通协作变得异常困难。 一开始,我们仅仅希望找到管理需求及缺陷的地方,信息集中存放、来源唯一,让我们不淹没
TAPD敏捷研发
2018/10/29
1.1K0
赢天下,技不凡:小赢科技与TAPD奏出最美和弦 | TAPD经验谈
【快来学】腾讯产品&设计师的提效神器!
在设计产研协作过程中,除了需要使用企业必备的 IM 软件外,很多时候还需要来回切换不同复杂的应用系统。
阿那个沫
2022/09/22
9140
【快来学】腾讯产品&设计师的提效神器!
首度揭秘:腾讯敏捷研发和极速交付破局之道
 导读  腾讯到底是怎么进行敏捷研发和极速产品交付的呢? 腾讯研发管理部高级产品经理、敏捷教练张贺,受邀在DevOpsDays深圳站中进行了相关分享。 他从“道、法、术、器”四个方面揭秘了腾讯当年面对研发方面挑战时的破局之道,并结合实践介绍了腾讯的三种研发模型及典型案例。 快来一起看看吧~ 大家好! 首先做一下自我介绍,我叫张贺,来自腾讯研发管理部,目前主要负责腾讯敏捷研发体系和敏捷研发平台TAPD的建设工作,同时我个人也是一名敏捷教练,指导了腾讯内部很多业务团队的敏捷实施,也帮助了许多腾讯合作企业完成了
TAPD敏捷研发
2018/12/18
1.7K0
首度揭秘:腾讯敏捷研发和极速交付破局之道
敏捷研发—前端DevOps流水线实践
Tech 导读 本文介绍了如何将DevOps理念应用于前端开发的实践指南。从前端开发的背景现状及问题分析入手,详细介绍了前端DevOps中的流水线设计、需求管理、代码构建、测试部署、性能检测等方面的实践方法和工具,并结合案例分析和实践建议,帮助读者深入理解和掌握前端DevOps的核心概念和实践技能。 01
京东技术
2023/09/21
9770
敏捷研发—前端DevOps流水线实践
保险公司如何探索高质量价值交付?研发效能负责人这样说
作为全国性专业寿险公司,某知名保险公司主要经营财产保险业务的全国性保险公司和人寿保险、健康保险和意外伤害保险等人身险业务。
TAPD敏捷研发
2023/07/05
2340
保险公司如何探索高质量价值交付?研发效能负责人这样说
腾讯专有云研发过程首次披露
2018年11月3日,DevOps国际峰会于深圳圣淘沙酒店举行,上午的腾讯研发效能专场,开场前已座无虚席。由腾讯工蜂Git、腾讯TAPD、腾讯专有云三位产品/技术负责人带来各自产品在DevOps实践上的分享,这也是腾讯专有云首次披露研发过程。
腾讯技术工程官方号
2018/11/08
9.5K0
从0到1,QAPM在私有化实践过程中的质量保障
QAPM(移动监控)在TMF中交付已经走过两个年头,两年的时间,我们也在不断成长。截止到2020年12月,QAPM私有化工单数量收敛,安灯工单数48单下降到8单,同时,公有云工单也同步下降,从122单下降到42单,产品包含有前端、后台、SDK,还包括大数据,在公有云中涉及的组件就超过10个。回想起来,当年收到TMF的邀请,承载巨大的压力,如何快速实现私有化,并保障质量,这里多多少少有一些实践,一些坑。在我们写这篇文章的时候,我们另外一个产品“移动分析“也在走一样的路径,好的实践还是要继承下来。
010101011001
2021/02/09
2K0
TAPD项目管理:工作流自动化最佳实践
TAPD全称为腾讯敏捷产品研发平台,凝聚了腾讯内部各个产品体系多年敏捷开发的实践精髓。TAPD的【自动化助手】模块通过【触发条件】+【执行条件】的规则设定,可以轻松实现自定义子需求、父需求、缺陷管理之间的流转和自动化。
阿那个沫
2022/11/24
1.9K0
TAPD项目管理:工作流自动化最佳实践
这里是TAPD近期大新闻
大家好,以下是TAPD近期大新闻——  1 TAPD携手腾讯乐享、腾讯工蜂 首次集体公开亮相 @ 南京·腾讯全球合作伙伴大会 11月1日,2018腾讯全球合作伙伴大会在江苏大剧院开幕。这是腾讯新一轮架构调整后的首次大会。 这一次,腾讯研发管理产品的代表——腾讯TAPD、腾讯乐享及腾讯工蜂,首次集中公开亮相。 作为沉淀了腾讯内部十余年研发协作与企业管理经验的成果,三款产品的集中亮相,引起了参会者的浓厚兴趣。 参会者纷纷驻足了解 虽然我们的展位在风口,身穿两条秋裤也被吹得瑟瑟发抖,几乎每个驻足
TAPD敏捷研发
2018/12/18
1.1K0
这里是TAPD近期大新闻
互联网研发效能方法工具落地金融行业的实践方法
近日,腾讯DevOps产品专家王一男在GOPS大会上发表了题为《互联网研发效能方法工具落地金融行业的实践方法》的主题演讲。文章整理自王一男在GOPS大会上的演讲。 大家好,我是腾讯TEG的王一男。过去一年,我的主要工作是把互联网企业内部的研发效能工具产品化对外toB,给其它行业尤其是金融行业客户提供研发效能提升的解决方案。在这个过程中我发现腾讯等互联网公司的效能工具和方法落地金融行业时会遇到一些"水土不服"的现象。今天的分享是过去一年工作的经验总结,希望能够推动敏捷、DevOps跨行业赋能过程中
TAPD敏捷研发
2021/06/18
1.6K0
推荐阅读
相关推荐
腾讯 TAPD DevOps 开放生态最佳实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验