暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Fastapi框架 【开源(自用)脚手架】

小儿来一壶枸杞酒泡茶 2021-10-07
4623

一.序言

首先之前也有介绍个关于这个脚手架的一些简单的使用,但是随着一些我个人实践过程中感觉有些时候,其实自己会过度的封装或封装不优雅。且当时叙述的也比较模糊,有部分的大佬们说看不懂我写的,现在我自己回头一看好像确实也有些地方描述的不清。

出于之前承诺过说开源,本身这脚手架封装自我感觉其实技术含量本身不是很高哈哈,但凡有些经验的,如果都是写个大概!我呐,主要一方面为了增加自己表述能力,一方面也是为了自己做好一些日常的问题的笔记梳理,所以才会想着去多多输出~人真的是很容易健忘的,有些东西如果你来不及记录,有些东西忽闪而过,瞬间就烟消云散了····

二.脚手架主要是的功能

开源脚手架和之前介绍的有一些优化的地方,也有优化插件的地方。

整个脚手架主要是的功能点有:

  • 项目配置文件处理

  • API日志记录处理

  • 异步redis缓存处理

  • 同步数据库整合使用

  • 异步数据库的整合和使用

  • 全局错误异常处理

  • 全局的Http请求响应报文的处理

  • 扩展第三方插件-限流器

  • 扩展第三方的插件-错误统计处理

  • 扩展-第三方插件-全局的认证JWT

  • 扩展-第三方插件-消息队列的整合

  • API版本的规划和处理

  • Api相关的单元测试和引入相关性能分析

三、新增优化点

主要优化的点:

  • 1:配置参数的从环境变量读取,基于pydantic的环境变量读取

  • 2:项目结构上偏向于微服务化方式来规划结构(如果是单体的应用的话,不建议规划的成这样的那么复杂)

  • 3:日志插件的优化,避免在方式调用链上进行request的传递优化,也就是不需要在方法上进行request的传递

  • 4:对rabbirmq简单的应用和封装

  • 5:新增对接sentry的错误手机的插件

四.优化点举例说明

4.1避免传递request

PS此处是某网友提出如何避免传递的问题一个问题,当时可能是我没太理解他的意思,这个是自己处理方案,仅供参考!

之前日志的日志的记录的时候,我们的定义个静态的方式,但是这个方法中,涉及到了fastapi中的上下文request的传递的问题,但是我又不想写这个传递:如:

基于这种写法,我个人比较讨嫌,觉得没必要继续再写一个request来处理。所以优化了一下日志的记录方法:

优化记录日志的方法后,我们的调用链上就可以简化了:

4.2 插件的初始化

基于使用的插件化的方式的思考的思路,我自己后续所有的插件都是基于这个的思路进行封装的,其实主要也只是利用的app启动相关的G钩子函数做相关的文章。

  • 1:给每个插件的实例的启动都传递一个app的引用

  • 2:在插件的内部自己进行app实例启动成功的回调进行相关的初始化

  • 3:后续还需要考虑的是如何进行插件启动成功初始化成功会的回调处理。

    关于回调的主要是考虑到部分的插件初始化成功后,我们需要进行相关的一些数据的初始化,分类出来啦插件初始化和,初始化的一些其他时间的处理。以下是我个人一些思路方案:

    • 增加函数回调的方式进行通知插件初始化成功

    • 通过注册信号量,发送信号量的方式进行通知

4.3 自定义异常一些建议

关于自定异常,这里我还没定义太多的自定义异常,主要考虑到后续一些依赖注入的常见中,如果需要直接的抛出错误的的时候,我们需要进行直接的raise

如果你需要用到我这的地方的话,建议自己增加异常类的方式来抛出给全局的异常处理器处理即可!哈哈

五.关于未来会考虑写一些内容

鉴于当前我自身的时间安排上可能不是很充裕,趁着现在还有点思绪,先把接下来可能需要些的内容给梳理一下,便于后续依据这些点来继续关于fastapi一些实践应用的输出。

  • fastapi中介入prometheus普罗米修斯的监控整合篇

  • fastapi中对接sentry的整合篇

  • fastapi中的日志对接ELK或使用Loki的进行日志收集篇

  • fastapi在微服务的中规划和整合篇,主要是对RPC的对调用和和整合

  • fastapi对接kafka的一些实践篇。

  • fastapi脚手架结合cool admin vue来整合RPAC

  • fastapi在kubsphere中自动化流水线部署篇

六.关于脚手架可圈可点地方

其实这个封装是我一步一步从自己的实践进行提取的,不一定是最佳的实践,如果你你有更好的处理的方案,希望你可以不吝赐教,难得有同道中人哈哈!小弟我一定不胜感激!

首先可圈可点的地方:

  • 模块的划分偏向微服务化了

  • 相关的配置信息,后续应该引入配置中心来处理更加优雅,小应用的可以忽略!

  • 框架目前对弈异步的实践案例暂时木有,主要是没啥时间咧

  • 当前脚手架主要适应小项目咯,大项目的,考虑的东西还挺多滴!比如网关,比如服务注册发生,比如监控,比如日志收集,这些都是未来我计划要整理滴!

六.开源说明

首先这个脚手架纯属个人的实践总结,如有什么不对的真希望方家多多提点,‘三人行必有我师’,如果你有更好的提议的话,开源给我的提交相关的Pull Requests!或者加我QQ聊聊哟!

如果你觉得这个对你还有点小帮助的,如果可以的话,也关注一下我的公众号呗!哈哈 感觉有点虚荣了,哈哈~其实我的号没啥人!


开源地址:https://gitee.com/xiaozhong1988/fastapi_skeletons


我的公众号是:

公众号:微信搜【小儿来一壶枸杞酒泡茶】

开源地址:码云



3.总结


以上仅仅是个人结合自己的实际需求,做学习的实践笔记!如有笔误!欢迎批评指正!感谢各位大佬!

结尾

END

简书:www.jianshu.com/u/d6960089b…

掘金:juejin.cn/user/296393…

公众号:微信搜【小儿来一壶枸杞酒泡茶】

小钟同学 | 文 【欢迎一起学习交流】| QQ:308711822


文章转载自小儿来一壶枸杞酒泡茶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论