文章编号:1007-757X(2020)05-0107-03
基于PhalApi的Api服务平台系统的设计与研究
周文浩,宋英雄
(上海大学特种光纤与光接入网重点实验室,上海200444)
摘要:不同于大型企业,中小型初创企业在为自身应用研发相应的Api服务平台的同时,需要注重时间成本和经济成本的控制。而采用基于PhalApi和OAuth2.0协议的轻量级架构可以在保证系统资源安全的前提下达到敏捷开发,缩短开发周期的目的。通过在该架构下对大量数据批量存储入库效率的测试研究,进一步优化了系统在大量数据存储入库方面的性能。该系统为中小型初创企业提供了一个平衡时间和成本的Api服务平台方案。
关键词:PhalApi框架;OAuth2.0协议;批量存储;成本控制
中图分类号:TP311.1文献标志码:A
Design and Research of API Service Platform System Based on PhalApi
ZHOU Wenhao,SONG Yinxiong
(Key Laboratory of Special Fiber Optics and Optics Access Networks,Shanghai University,Shanghai200444,China) Abstract:Differing from large enterprises,small and medium-sized star-ups need to pay attention to the control of time cos­and economic cost while developing corresponding Api service platform for their own applications.The lightweight architecture based on PhalApi and OAuth2.0protocol can achieve agile development and shorten the development cycle on the premise of ensuring the security of system resources.By testing and studying the efficiency of mass data storage in the framework,the performance of the system in mass data storage is further optimized.This system provides an Api service platform for small and medium-sized start-ups to balance time and cost.
Key words:PhalApi frame;OAuth2.0protocol;batch storage;cost control
0引言
当今大型企业的Api服务平台的后端业务框架多是基于SSM(Spring SpringMVC MyBatis)来开发的,对于那些中小型初创企业而言,采用此框架需要维护一个规模不小的开发运维团队,从时间和金钱角度而言也是开销巨大的。另外,对于某些特定业务功能而言,无论是在开发速度还是迭代周期等方面,SSM又显得太过笨重。有鉴于此,OpenApi 服务平台系统的成本与性能的平衡问题是中小型初创企业不可回避的。
本文所研究探索的基于PhalApi的Api服务平台系统正是致力于解决中小型初创企业无法到合适贴切的开源框架的困境。其良好的架构约束规范保证了在海量数据下系统的性能稳定⑴。这些都对中小型初创企业在降低开发和维护自身开放服务平台时的时间和金钱成本方面具有重要意义。
1系统的设计
1.1基于WAMP的底层环境架构设计
WAMP是指在Windows环境下配置Apache+Mysql+ PHP相关组件的一种开源软件环境架构在整个系统结构中,WAMP作为底层环境架构主要负责对http请求的解析处理和响应,具体结构如图1所示。
图1WAMP系统架构流程图
在实际设计过程中若以外网的方式访问,则需要更改a-pache的相关配置文件。在配置文件夹中到f这个文件,到deny from all这行代码并删除,然后把allow from127.0.0.1这行代码更改为allow from all()。具体的配置文件代码,如图2所示。
#onlineoffline tag-don't remove Order Deny f Allow
Allow from all
图2apache配置代码
另外,为了为了确保url重写功能能够正常运行,需要把配置文件中AllowOverride none这段代码更改为A1-
作者简介:周文浩(1994-),男,硕士研究生,研究方向:基于PHP&AVA等相关计算机语言的后端业务设计研发。
宋英雄(1973-),男,副研究员,研究方向:宽带接入网技术。
lowOveride all。具体代码如图3所示:
#AllowOverride controls what directives may be placed in.htaccess files.
#It can be"All","None",or any combination of the keywords:
#Options Fileinfo AuthConfig Limit
AllowOverride all
图3url重写功能配置代码
1.2基于OAuth
2.0认证协议的安全设计
基于OAuth2.0协议,用户可以在第三方应用提供用户名和密码的情况下授权第三方应用用api等方式访问其保存在服务,照片等资源⑷。OAuth2.0的大致框架流程,如图4所示。
图4OAuth2.0协议授权过程
它既保障了用户私密信息的安全性,又减少了因为授权生的同步时延时间成本,进一步提升了用户体。
使用授权码模式完成OAuth2.0授权的过程需要以下3个步骤:(1)client请求授权服务端,获取Authorization Code;(2)client通过Authorization Code再次请求授权服务端,获取Access Token;(3)client通过服务端返回的Access Token 用户的基本信息()。第三方应用正式通过上述的几接口与服务端交互用户授,其主要的流程,如图5示。
图5OAuth2.0协议授权过程
具体实现代码,如图6所示。
{client id=client id;
{client secret=client secret;
$url="host:port/getaccesstoken?client_id=".$clientjd."&client_secret=".$client_secret;
$ch=curlinitO;
curl setopt($ch,CURLOPT URL,$url);
curfsetopt($ch,CURLOPT"SSL VERIFYPEEFl,FALSE);
curl setopt($ch,CURLOPT SSL VERIFYHOST,FALSE);
curl setopt($ch,CURLOPT RETURNTRANSFER,1);
^output=curl exec($ch);
curl close($ch);
Sjsoninfo=json decode($output,true);
$token str=$jsoninfo["access token"];
$expire second^$jsoninfo["expire second"];
ur)link($token filename);
file put contents($token filename,date(,Y-m-d.H:i:s,).n".{token str,FILE APPEND);
图6OAuth2.0协议实现关键代码
1.3PhalApi轻量级框架
PhalApi框架又被称为兀框架,作为国内一款完全开源的轻量级PHPApi开发框架,它用于api平接口服务,支持HTTP/SOAP/RPC协议,可用于快速搭建服务、RESTful接口或Web Services®。连接数据库配置代码如下所示:
/**
)DB数据库服务器集
)/
'servers'=〉array#
db_v1=〉array#//服务器标记
host=>106.14.197.183,//数据库域名
name=>hospital,//数据库名字
user='hospital,//数据库用户名
'password=>hospital,//数据库密码
'pot=>3306%//数据库端口
charset=>UTF8,//数据库字符集
),
)!
/
)自定义路由表
)/
tables=>array(
//用
'―default―'=>array#
prefix=>!
key=>id!
map'=>array#
array(z db z=>'db_v1'),
),
),
PhalApi舍弃了View层,取而代之的是Domain业务层,进而形成了ADM模式,其中Api层制器把请求转发到service层进行处理,最终把响应结果渲染到页面因此Api在整程中扮演制()。PhalA-pi的最大特点就是能够自动生成在线接口列在线接口详情图形界面,以方便时接口签名和返回字段。可视化界面如图7和图8所示。
图7 Api 服务平台页面
图8 Api 服务平台接口详情界面
2系统性能测试
由于本系统是面向某企业设计的聚合类接口服务平台,
因此在性能
须保证稳定和高效。而在 应用中需要
每隔一段时间调用一次入库Api 存储十万级甚至百万级的
数据,所以接下来着重测试Test. Warehouse 接口。
2.1
测试准备
本次测试采用本机作为一台小型服务器。同时,为了使
测试 有
! 证硬件设备参数 ,每
次 数据库
级数据 操作
。具体测试环境信息,如表1所示。
1测试服务 配 信息
CPU
In  elCorei7-8550U
CPU 频率
1. 8 GHz
CPU 核数4核内存
16G 硬盘
256G PhalApi
1.4.1
MySQL 版本
5.7.24
2. 2 测试流程
采用逐条插入的方式将10万条数据进行存储
入库。测试 次性逐条入库10万条数据
时为86.397秒。显然! 效 库方式在 应用中是不能 接受的。因此!
库方
步优化。具体代码如下所示。
/
$ 1 = microtime(true);
for( $i=1;$i & = 100000; $i  ++ )
DI()-〉notoimr 〉tes--〉insert( $ b);
$82 = micro8ime ( rue )%
time  = round # $ t2- $1,3);
$ sql= "TRUNCATE  TABLE  test ” ;
DI()-〉no  -o rm-> -e s  t ->queryAll( $ sql);
re -u rn  $ -i m e."秒";
在实际应用过程中,面对大量数据的存储入库问题,采
用批量插入的方式可以极大地提升入库效率! 步
研究测试 ,单次提交的数量同样
大量数据的入库
性能。测试过程中,更改单次提交数量,将10万条数据分批
提交入库,得到九组测试数据,测试结果,如图9所示。
图9十万级数据批量入库存储所耗时间
10万条数据枇量存瞬斤耗时间单位:秒)
1条
50条100ft 500条1000条5000条10000条50000条100000条第—组82.8188.4697.288  5.941  5.877  6.095  6.19410.69811.067第二82.74&9517.0747.743  5.747  6.523  6.57110.59711.163第三组82.6148.5427.192  6.377  5.981  5.889  6.47310.75511.15第四组82.7838.852  6.722  6.524  5.798  5.968  6.06511.19811.299第五组82.517&053&703  5.909  6.752  6.021  6.30811.18511.875第六组82.9029.2A3  6.299  5.985  6.142  6.194  6.15610.50611.225第七组82.6689.527  6.598  6.27  5.724  6.072  6.36411.09611.369第八82.787&776  6.875  6.056  5.934  6.351  6.28810.87311.572第九82.4868.308  6.852  6.24  5.928&124  6.62410.52111.446平均值
82.701678.7423336.8447786.338333  5.9876.1374446.33811110.8254411.35178
具体代码逻辑如下所示。
/
)10万条数据批量插入
)/
$a=array ()%
$ 1 = micro  ime ( rue )%
for( $ i= 1 ; $ i & = 100 000 ; $ i+ + ) {
array _push ( $ a , $ b );
if(i%50 000= =0) {
DI()-〉no  -o rm-> tes--〉insert_multi( $ a);
$ a= arrayO  ;
4
4
DI()-〉no  -o rm-> -e s  --〉insert_multi( $ a);
$ 2 = micro  ime ( rue );
$ ime=round ( $ 2-$ 1 ,3)%
$sql="TRUNCATE  TABLE  es  " %
DI()-〉no  -o rm-> -e s  t ->queryAll( $ sql);
re  urn  $ ime." 秒" ;
通过对九组数据
较可以发现,对10万条
数据进行批
库时,大量数据 库性能随着单次提
交数量的增加而提升,但 成 。
次提交数量达
到1 000笔以上时,存储入库效率变化不大趋于平稳,如图
10所示。
10
条数据逐条
(下转第133页)
到96.5]。
在应用方面,本文工作主要在两个方面发挥作用:古汉语现代机器翻译和古汉语信息检索。对于今后的工作,首先需要解决古汉语的概率上下文无关文法(PCFG)。另外本文中程序使用的语料库较小且不包含注释,为了进一步研究可以先人工搭建一个中型语料库或者使用其他机构提供的语料库。
参考文献
[1(Brill E.A simple rule-based part-of-speech tagger [C(//Proceeding of the3rd Conference on Applied Natural Language Processing(ACL#.地点,时间1992:
152-155
[2(钱智勇,周建忠,童国平,等.基于HMM的楚辞自动分词标注研究[J(.图书情报工作,2014,58(4):
105-110
[3(Hindle D.Acquiring disambiguation rules from text [C(//Proceedings of27t h Annual Meeting of the Asso­ciation for Computational Linguistics,地,时
1989:页码.
[4(Viterbi A.Error bounds for convolution codes and an asymptotically optimal decoding algorithm[J(. Information Theory,1967(13):260-269.
[5(韩霞,黄德根.基于半监督隐马尔科夫模型的汉语词性标注研究[J(.小型微型计算机系统,2015,36(12):
2813-2816
[6(余昕聪,李红莲,吕学强.最大,和HMM在中文词性标注中的应用[J(.无线互联科技,2014(11):
页码?.
(:20190821)
(上接第109页)
3结果分析
由系统测试结果可以看出,当使用PhalApi框架对十万级甚至百万级数据进行存储入库时,采用msert_multi批量插入的方式可以大幅提升海量数据的入库效率。如图11所示,进一步深入框架底层研究i
nsert_multi函数的源码可以发现,批量插入正是在一句标准插入SQL语句中封装多条数据,然后提交至服务端。而如果采用逐条插入的方式,那么插入100000条数据就会有100000条insert语句提交到服务端,每一句都需要提交到数据库引擎中去解析、优化o 结果必将是增加数据库的开销,进而大大降低整个系统的性能。更简明地说,批量插入使得提交到服务器地insert语句减少了,服务端压力也随之减小,虽然对单个SQL语句的解析和优化的时间相应增加,但实际的存储数据行却大幅增加,因此系统的整体性能得以提高°inset_multi函数底层源码如下示'
//2driver specific extended insert
$insert=($data$this-〉notORMO driver==" mysql")
7"(3$quoteChar}".implode(”3$quoteChar}, 3$quoteChar}",array_keys($data))."3$quoteChar}) VALUES”.implode(",”,$values)
:"DEFAULT VALUES"%//requiresempty$this-〉parameters
$return=$this-'q uer y("INSERT INTO$this-'table $insert",$parameters)%
4总结
api设计
本文设计的基于PhalApi和OAuth2.0协议的接口服务平台系统具有可快速部署,安全性高,迭代周期短等特点,为中小型企业和初创团队搭建聚合类接口服务平台提供了一个平衡时间和金钱成本的高性价比方案。另外,通过对本系统性能的进一步研究测试,本系统经受了企业级的功能测试,在保证系统安全稳定运行的同时,还进一步提升了大量数据存储入库的效率。
参考文献
[1(欧海文,付永亮,于芋,等.一种改进的OAuth授权机制有效性分析[J(.计算机应用与软件,2017,34(12):
196-201
[2(黄小冬,陈薇.教育教学数据OpenAPI设计与实现[J(.软件导刊,2015,14(5):115118.
[3(段玉龙.基于OAUTH、OPENAPI、REST技术的快速开发云平台架构的设计与实现[J(.工业设计,2016
(2):160-161
[4(王丹磊,李长军,赵磊,等.OAuth2.0协议在Web部署中的安全性分析与威胁防范[J(.武汉大学学报(理
学版),2012(12):4143.
[5(谭晨辉,刘青炎.OpenAPI出现、起源与现状[J(.程序2016(7):411-417
[6(HARDT D.The OAuth2.0Authorization Framework [EB/OL(.(2012-3-30)http:///html/
draft-ietf-oauth-v2-31
[7(Cloud Security A l iance The Treacherous Twelve [EB/OL(.2016:42(2):229233.
(:20190922)