✨基于 Bottle 框架开发API 之 从零到简单封装到应用到上线部署(3)-封装的代码结构规范

1,112 阅读5分钟

逼逼叨叨

关于我自己: 纯粹的是打杂的一个,似乎啥活都干过,小公司里搬砖久了,似乎啥都懂一些,所以博文有些地方估计有纰漏,还请各位大侠,多多担待! 这一系列的文字算不上是文章,反倒像我个人的日常的开发笔记,难免也有些事我自己的个人想法,如有什么问题或错误欢迎各位指出,如有打扰的地方,也希望各位多多海涵。

ps: 如文章有打扰之处,还请多多原谅!我也只是想记录一下而已没别的!

前言

接上篇的基础开始,接下来我就开始接触我们所谓的真正的API开发。

关于API(Application Programming Interface 翻译过来就是:应用程序编程接口),API提供的是一些预设好的接口或函数,提供客户进行调用获取相关的资源信息。API按风格类型来的,目前主要的形式有:REST(HTTP)和 RPC 两种。 对于的RESTFUL API的理解,以下的文章参考菜鸟教程,提炼一些关键的信息:

  • 1:RESTful一种软件架构风格,是一种规范,不是一种技术框架
  • 2:RESTful 是对被调用资源的一种抽象,每个资源标记一个URI
  • 3:提供标准的方法,对资源进行CURD
  • 4:和HTTP相辅相成
  • 5:对资源的操作,服务端是无状态,不需要保持Session

通常我们先用的API提供上基本上目前都还是基于HTTP或HTTPS对外提供服务的多一些,便于内部的话,当然主要是RPC了。

封装

所谓的框架,就是为提供好一个基础的架构,让你更专注与自己的业务逻辑即可,就行Bottle一样,它把作为一个web框架应有的基本元素都提供了。

通常一个快速可以使用的web框架需要提供以几个核心的组件模块

如:缓存、日志、定时器、命令行、文件锁、数据校验、定时任务、数据库ORM、TCP/UDP组件、进程管理/通信等模块。 当然还包含一些其他的工具类文件: 如:时间、队列、数组、集合、字符串、定时器、命令行、文件等

因为Bottle定位于微型的框架,一些东西是不存在的,所以我们可以再Bottle基础上,增加扩展一些其他第三方库,便于我们更好的专注于我们的业务逻辑的处理。

比如我们可以扩展的有:

  • 1:Token令牌:使用JWT令牌机制,可用于单页面应用程序,合适做前后端分离等应用
  • 2:bottle自定义全局的错误异常,重写HTTPError 统一异常返回格式,方便前端开发
  • 3:使用wtforms表单验证相关的表单提交参数,方面我们的更加便捷的进行用户提交的参数的校验
  • 4:更详细log日志记录,记录整个请求链路相关记录,也可以记录自己定义记录
  • 5:peewee orm数据库的使用和简单封装
  • 6:类似Flask蓝图应用
  • 7:统一API接口的返回,规范API接口
  • 8:提供一下常用封装好工具类
  • 9:还可以自定义自己属于自己的ORM(本质上就是对SQL语句的封装)

项目结构规划

从封装的角度看,我划分的类库越少,越便于管理,所以我们提倡的尽量少定义太多的模块。当然,各司其职的精细化的模块分包,有些时候感觉也不是不可行。前期我们的还是需要定义一下,我们的项目结构。

因为现在微服务已经是大势所趋,在一个项目里面我们会根据业务需求拆分一些业务出来,各个业务之前的通信可以通过RESTFUL或RPC进行调用。所以我们我们的一般会封装一些基础的类库出来提供给其他子App,通过继承的的方法,提供各自的业务接口。

如图示我个人的一个代码结构如下:

项目结构说明

基础库core

core下存放是我们的基础库信息,主要包括的有,对基本的BasicApp的一些封装。具体的说明如下:

application -- 基础的应用,主要是封装基础的bottle实例对象
cache       -- 封装一个关于redis单例模式,用于我们应用中的缓存处理
config      -- 配置文件读取基础模块(其实可以不需要)
db          -- 封装自定义数据库ORM,对SQL的封装处理
exceptions  -- 全局错误异常捕获插件处理
forms       -- 用户提交表单或参数的校验器,wtforms的封装处理
helper      -- 一些工具类的存放地,如时间处理,还有JSON处理,还有微信发送异常等工具
http        -- 对requests的封装,用于第三方接口的请求,并加上相关的日志统计
lib         -- 其他第三库包
logger      -- 应用日志的对象的初始化封装
middleware  -- bottle中间件的一些示例
routes      -- 实现类似PHP请路由方式的尝试
rsp         -- 自定义响应报文信息封装、
signals     -- 信号库的封装,用于业务解耦的信号发送处理
utils       -- 其他工具类

应用实例app_demo

app_demo下存放是我们具体的应用层需要处理的信息:

api         -- 当前应用所以对外提供的API接口
config      -- 当前应用的配置文件存放
log         -- 当前应用生产的日志文件信息
models      -- 当前应用相关数据模型的生成存放
service     -- 当前应用数据逻辑的操作处理
validators  -- 当前应用接口使用的一些wtform的校验实体存放
xtests      -- 测试用户脚本
app.py         -- 应用的创建App对象
test_start.py  -- 应用测试脚本的启动

(完)

总结

以上是准备步入封装系列笔记的基础,规范好我们的相关的模块划分之后,我们就可以针对性进行处理!

END

好了各位,以上是关于bottle估计也是没什么营养,主要是对接下来封装进一步铺垫!

小钟同学 | 文 【原创】【转载请联系本人】| QQ:308711822