• Furion框架亮点之-动态WebAPI


    Furion框架亮点之-动态WebAPI

    最近研究小僧的.Net5框架Furion,其中不乏让人眼前一亮的新鲜玩意儿。于是想把一些亮点记录并作分享。

    相关地址

    项目
    文档

    动态WebAPI简述(摘自文档)

    动态WebAPIFurion框架创造出一种更加灵活创建WebAPI控制器的方式,它对ASP.NET Core WebAPI进行了大量拓展和优化。
    具有以下优点:

    • 具备原有的ControllerBase所有功能
    • 支持任意公开非静态 非抽象 非泛型类转控制器
    • 提供更加灵活方便的IDynamicApiController空接口或[DynamicApiController]特性替代ControllerBase抽象类
    • 无需手动配置[HttpMethod]特性,同时支持一个动作方法多个HttpVerb
    • 无需手动配置[Route]特性,支持更加灵活的配置及自动路由生成
    • 支持返回泛型接口,泛型类
    • Swagger深度结合,提供极其方便的创建Swagger分组配置
    • 支持Basic Auth Jwt ApiKey等多种权限灵活配置
    • 支持控制器、动作方法版本控制功能
    • 支持GETHEAD请求自动转换 类类型参数
    • 支持生成OAS3接口规范

    代码与效果

    先来看看代码

    public class PersonAppService : IDynamicApiController
    {
        private readonly IRepository<Person> _personRepository;
    
        public PersonAppService(IRepository<Person> personRepository)
        {
            _personRepository = personRepository;
        }
    
        public Person Insert(Person person)
        {
            var entryEntity = _personRepository.InsertNow(person);
            return entryEntity.Entity;
        }
    
        public List<Person> GetAll(string keyword)
        {
            return _personRepository.Where(!string.IsNullOrEmpty(keyword), u => u.Name.Contains(keyword)).ToList();
        }
    }
    

    仅仅这样,Swagger上已经能显示接口

    使用方法

    创建一个类继承IDynamicApiController接口 或 贴[DynamicApiController]特性即可。

    动态WebAPI配置约定(摘自文档)

    控制器默认约定

    • 生成控制器名称默认去除以 AppServices,AppService,ApiController,Controller,Services,Service 作为前后缀的字符串。见第一个例子中的 FurAppService -> Furion 支持自定义配置
    • 控制器名称带 V[0-9_] 结尾的,会自动生成控制器版本号,如 FurAppServiceV2 -> Furion@2,FurAppServiceV1_1_0 -> Furion@1.1.0。支持版本分隔符配置
    • 控制名称以 骆驼命名(CamelCase) 会自动切割成多个单词 - 连接。支持自定义配置

    动作方法默认约定

    • 生成的动作方法名称默认去除以 Post/Add/Create/Insert/Submit,GetAll/GetList/Get/Find/Fetch/Query/Search,Put/Update,Delete/Remove/Clear,Patch 开头的字符串。支持自定义配置
    • 生成的动作方法名称默认去除以 Async 作为前后缀的字符串。支持自定义配置
    • 动作方法名称带 V[0-9_] 结尾的,会自动生成动作方法版本号,如 ChangePasswordV2 -> ChangePassword@2,ChangePasswordV1_1_0 -> ChangePassword@1.1.0。支持版本分隔符配置
    • 动作方法名称以 骆驼命名(CamelCase) 会自动切割成多个单词 - 连接。支持自定义配置
    • 动作方法参数将自动转为小写。支持自定义配置

    请求谓词默认约定

    • 动作方法名
      以 Post/Add/Create/Insert/Submit 开头,则添加 [HttpPost] 特性。
      以 GetAll/GetList/Get/Find/Fetch/Query 开头,则添加 [HttpGet] 特性。
      以 Put/Update 开头,则添加 [HttpPut] 特性。
      以 Delete/Remove/Clear 开头,则添加 [HttpDelete] 特性。
      以 Patch 开头,则添加 [HttpPatch] 特性
      支持自定义配置
    • 如果不在上面约定中,则默认添加 [HttpPost] 特性。支持自定义配置

    路由地址默认约定

    • 默认以 api 开头。支持自定义配置
    • 默认转换为小写路由地址。支持自定义配置
    • 生成控制器路由模板格式为:api/前置参数列表/模块名或默认区域名/[controller@版本号]/后置参数列表
    • 生成动作方法路由模板格式为:前置参数列表/模块名/[action@版本号]/后置参数列表

    其他约定

    • 默认不处理 ControllerBase 控制器类型。支持自定义配置
    • 默认不处理 GET,HEAD 请求的引用类型参数。支持自定义配置

    原理解析(摘自文档)

    控制器特性提供器

    Furion 框架会在应用启动时注册 DynamicApiControllerFeatureProvider 控制器特性提供器,该提供器继承自 ControllerFeatureProvider 类。
    接着重写 bool IsController(TypeInfo typeInfo) 方法,用来标识控制器类型。在 Furion 框架中,继承自 ControllerBase 类或 IDynamicApiController 接口或 [DynamicApiController] 特性都会被标记为控制器类型。

    应用模型转换器

    Furion 框架同时在应用启动时注册 DynamicApiControllerApplicationModelConvention 应用模型转换器,该转换器继承自 IApplicationModelConvention 接口。
    接着实现 void Apply(ApplicationModel application) 接口方法。在该方法中配置控制器名称、路由、导出可见性及动作方法名称、路由、导出可见性等。

    其他

    更多操作请查阅文档
    文档-动态WebAPI

    期待小僧和Furion能带来更多惊喜!

  • 相关阅读:
    【tomcat8】consider increasing the maximum size of the cache
    *更新*无需root,一条命令强制全屏模式
    处理SFTP服务器上已离职用户,设置为登录禁用状态
    一个Web 持续集成工作实践
    tensorflow实战笔记(18)----textCNN
    train loss相关问题
    Spark学习(4)----ScalaTest
    scala学习(4)---Array定长数组操作
    spark学习(3)---集合
    spark学习(2)---RDD
  • 原文地址:https://www.cnblogs.com/muphalem/p/14083466.html
Copyright © 2020-2023  润新知