APP下载

基于HTTP协议的CURD框架

2019-12-09成晓琰

智富时代 2019年10期
关键词:路由代码框架

【摘 要】本文针对于WEB项目中业务层对数据库的基本操作,也就是增删查改操作的常用代码归纳总结,依据于软件工程中的代码高可复用原则,书写的框架。主要应用于时下流行的关系数据库,也称作第三代数据库。如果用面向对象的模式书写业务层的话,那么多数的IO通信都是数据对象,要进行持久化操作的时候,就需要操作数据库。由于现在的主流数据库是关系数据库,其本质是规范话的二维表,需要我们做一个从对象到关系模型的映射。本框架就是针对于这类操作的一种简化,因为不可能规避,所以只能简化。

【关键词】HTTP协议;CURD框架

在软件工程的实践中,会或多或少的感觉到理论和实践中的差别,可行性与工程使用的差别。即使理论知识很扎实,在实践和工程构建的时候还是会遇到很多的问题。我们在开发一个WEB应用的时候,粗略可分为表示层、业务层、数据库层(当然依据于工程的大小所分的层次自然不一样)。表示层主要是负责人机交互的部分和HTTP数据请求和解析,业务层主要负责逻辑计算和调用关系,数据库层主要是负责持久化存储的事情(优质的项目大部分的数据运算都是交给数据库的函数和存储过程)。

在linux设计风格中,强调一个工具只做一件事情,剩下的事情通过管道来进行通信就好了。在现代的软件工程中,调用成为越来越长用的功能,当然也有很多人对自己的常用的代码进行总结,每次复制粘贴改。对于常用的代码的复用操作还是建议封装成函数或者是类,对入口参数进行通用性的修改。当然在当下如果能贡献给开源组织那就是更好的举措了,不仅能供给别人使用,还能有人对你代码的问题提出修改意见。

一、课题及研究背景和研究意义

随WEB前端的发展技术越来越迅猛,js也随着越来越快。对于一个现代的软件工程项目来说,持久化存储都是使用数据库进行操作。当我们使用ajax提交请求,业务层解析逻辑之后,将对数据库执行sql语句或者是执行存储过程。在有些不是很注重安全,专注于原型的高速敏捷开发的时候,就会觉得业务层就是解析ajax请求,执行sql,取回结果集返回给ajax,最后将数据拿到客户端。在有些时候,也在想,能不能直接使用ajax请求,操作数据库呢。这样一来可以减少开发的人力成本,二来可以减少调试和测试的成本。对于一些快速原型开发来说,有着重要的意义。

当然很多WEB开发的主流语言都有相应的数据库框架(ORM),比如java中SSH的H,PHP中TP的model,Django中的ORM都对数据库进行了简化的操作,不过他们的封装都依赖于框架本身的路由、视图、控制器等等。他们都只是强大框架中的一个核心组件罢了,如果想使用,基本要学习框架中的百分之八十的功能。不能做到开箱即用的程度。

二、主体架构设计

本次毕业设计采用python的tronado框架编写。对于语言和框架的考虑,个人觉得java代码太臃肿,C#可以移植性又太差,只能在PHP、python、perl中选择,考虑到PHP写起来还是没有python简洁,perl操作数据库的文档更少。就选择了python语言,对于python的web framework时下流行的有Django、tronado、web2py、flask、bottle。再考虑到学习成本和性能问题还是选择了最熟悉的tronado。不过python做web的缺陷就是很多问题不能在编译过程中暴露出来。

数据库采用sqlite3。选择这个数据库还是因为sqlite3是基于文件的,可移植性好。而且比较简单不用考虑端口和数据库独立进程的问题。而且所有基于linux的服务器都内置了sqlite3,这也给使用和部署的人员带来了便利。在使用层面sqlite3和主流的数据库管理工具都兼容,而且还有很多免费的sqlite3的可视化工具。不过还是有一定程度的缺陷的,sqlite3不支持存储过程和函数,只能采用python表达式拼接sql,sqlite3可以不指定字段类型,数据量达到一定时会有性能的问题。

三、接口设计

我们在接口的设计时,讲究的是一个接口制作一件事情,接口和接口之前所做的事情沒有相似性,这样在用户调用接口时不会产生歧义,不会因为要使用a功能而不知道调用a1还是a2产生纠结。在面向对象三大特性来说,封装,继承和多态。遇到这种问题我们就用多态来解决。增加可选参数,来实现统一大功能下的微调。

四、技术实现

本框架主体采用python语言的tornado框架编写,tornado主要有hanlder、路由、配置这么几部分组成。根据简单工厂设计模式,我们采用了一个接口对应一个路由,一个路由对应一个类,也就是我们刚才提到的hanlder进行接受请求参数,执行数据库操作,并获取数据库执行结果,将json格式的结果返回到相应中。

五、编码、测试以及过程中的技术难点

实现了上面的设计就是下面的编码操作了,通过http请求接受过来的dbname、tablename、以及字段名和字段值实现对数据库的增删查改的操作。

因为接受过来参数,使用python的占位符拼接sql语句,可能后期sql比较多会做一层封装,所以项目主要遇到的问题一般出现在sql拼接的问题。也没有太大的技术难点。

在测试过程中,发现打印的结果集格式有时候不是很理想,建议之后修改默认参数格式为json,也可以改为csv、xml等格式。对于安全性来说,没有设计token,用户口令的一类东西,计划后续再进行修改。

【参考文献】

[1]赵琦,蒋朝惠,周雪梅,宋紫华.一种基于HTTP协议的隐蔽隧道及其检测方法[J].计算机与现代化,2019(06):16-23+29.

[2]欧思维. TCP/IP网络与ICN网络融合研究[D].北京邮电大学,2019.

[3]赵文浩.加密http协议的实现[J].通讯世界,2019,26(03):3-4.

[4]李成哲.基于HTTP协议报文分析的计算机网络取证方法[J].网络安全技术与应用,2019(03):101-102.

[5]路辉,高尚飞,李少龙.基于HTTP协议的业务系统网页数据采集应用集成[J].电子技术与软件工程,2019(02):1-3.

[6]刘浩. 基于ONVIF协议的视频服务器的设计与实现[D].浙江工业大学,2019.

[7]周继宇.基于HTTP协议的多线程断点续传软件设计与实现[J].计算机产品与流通,2018(09):129-130.

[8]程磊.基于HTTP协议的多线程网络下载框架的研究与实践[J].科技经济导刊,2016(18):30-31.

[9]刘瑾,黄龙达.基于Java代理和HTTP协议的RMI框架的实现[J].现代计算机(专业版),2010(02):137-139+144.

作者简介:成晓琰(1992—),女,江苏无锡人,无锡机电高等职业技术学校,无职称,研究方向:计算机。

猜你喜欢

路由代码框架
广义框架的不相交性
探究路由与环路的问题
创世代码
创世代码
创世代码
创世代码
WTO框架下
一种基于OpenStack的云应用开发框架
PRIME和G3-PLC路由机制对比
WSN中基于等高度路由的源位置隐私保护