admin 管理员组文章数量: 1184232
2024年3月22日发(作者:matlab破解后打不开)
第43卷 第4期
2020年12月
上 海 船 舶 运 输 科 学 研 究 所 学 报
JOURNALOFSHANGHAISHIPANDSHIPPINGRESEARCHINSTITUTE
Vol.43No.4
Dec.2020
文章编号:1674 ̄5949(2020)04 ̄0039 ̄06
基于WSO
2
APIM的API全生命周期
管理平台架构设计与研发
李 翔
(中远海运科技股份有限公司ꎬ上海200135)
摘 要:为了能集中高效地对企业中已有的各类应用程序编程接口(ApplicationProgrammingInterfaceꎬAPI)进行管
理ꎬ基于WSO
2
APIM的开源组件ꎬ设计并搭建一套支持定义、开发、测试、发布和调用管理等API全生命周期管理的
API管理平台ꎮ通过引入ELK、Kafka和eCharts等第三方组件进行二次集成研发ꎬ实现对API调用记录的保存和大
屏显示等功能ꎮ经在某大型集团公司实际应用ꎬ验证该平台具有良好的效果ꎮ
关键词:应用程序编程接口管理平台ꎻ全生命周期ꎻ集成研发
中图分类号:TP317.1 文献标志码:A
ArchitectureDesignandDevelopmentofAPILifecycle
ManagementPlatformBasedonWSO
2
APIM
(COSCOSHIPPINGTechnologyCo.ꎬLtd.ꎬShanghai200135ꎬChina)
Abstract:OneofthemajorchallengesforenterprisemanagerishowtomanageawiderangeofAPI(ApplicationProgrammingInter ̄
builttosupportAPImanagementinthefulllifecycleꎬincludingdefinitionꎬdevelopmentꎬtestingꎬreleaseandinvokingmanagement.
sults.
face)efficiently.BasedontheopensourceAPIM(API ̄Manager)providedbyWSO
2
ꎬanAPImanagementplatformisdesignedand
Byintroducingsomethird ̄partycomponentssuchasELKꎬKafkaꎬeChartsꎬthefunctionsꎬlikerecodingtherawlogofAPIcallingand
theplatformdashboardaredeveloped.Thisplatformhasbeenofficiallylaunchedinalargegroupcompanyandachievedexcellentre ̄
Keywords:APImanagementplatformꎻfulllifecycleꎻsystemintegration
LIXiang
0 引 言
随着微服务架构的不断发展ꎬ各应用服务之间的数据交互越来越多地采用应用程序编程接口(Applica ̄
tionProgrammingInterfaceꎬAPI)完成ꎮAPI可完成系统内部各组件和各系统间的数据交换ꎮ以API的方式
给内部或第三方(即API消费者)ꎬ能更好地开发和提升其业务价值
[1]
ꎮ目前ꎬ除了企业内部ꎬ越来越多的互
联网企业开始采用API提供公共服务ꎬ即开放API(OpenAPI)ꎮ因此ꎬ企业内部应用系统可很好地利用
OpenAPI为企业创新应用赋能ꎬ提高系统的处理能力ꎬ扩大其业务范围ꎮ
收稿日期:2020 ̄08 ̄13
作者简介:李 翔(1985—)ꎬ男ꎬ湖南益阳人ꎬ工程师ꎬ主要从事系统架构设计、大数据处理方面的工作ꎮ
进行服务调用ꎬ可避免重复开发代码ꎬ从而提高系统集成的效率ꎻ同时ꎬ各应用系统间的数据孤岛可被打破ꎬ
数据资源可得到更加高效的利用ꎮ公司或组织(即API提供者)通过API的方式将其数据资产或服务提供
某大型集团公司在信息化系统建设过程中形成了大量内部APIꎬ如何便捷高效地对这些接口进行管理ꎬ
李 翔:基于WSO
2
APIM的API全生命周期管理平台架构设计与研发
41
是该公司未来提升整体信息化服务能力需考虑的重点问题之一ꎮ对此ꎬ该公司通过对行业内流行的商业和
开源方案进行比较ꎬ综合考虑功能完整性、性能、定制开发能力和运营成本等多方面因素之后ꎬ最终选择由
WSO
2
开源的API ̄Manager(APIM)搭建API管理平台ꎬ并在试运行期间针对原生平台存在的不足进行完善
和二次研发ꎬ从而实现对API生成、管理和集成的全面管控ꎬ实现对应用系统、数据库和已存在的业务API的
统一整合ꎬ提供连接各信息孤岛的数据通路ꎬ进而为数据融合、应用重组和业务重构奠定技术基础ꎮ
1 平台架构设计
Synapse上的APIM设计ꎮ整个管理平台采用微服务架构ꎬ各组件可实现动态伸缩ꎬ保证平台不存在性能瓶
颈ꎮ平台提供完善的API管理能力ꎬ具有限流、分项授权、后端负载均衡和故障转移等功能ꎮ整个API管理
平台由开发者门户、API发布组件、API网关、身份信息服务和统计服务等5部分组成ꎬ其架构见图1ꎮ
API管理平台采用由WSO
2
开源的构建于轻量企业服务总线(EnterpriseServiceBusꎬESB)组件Apache
图1 API管理平台系统架构
1.1 发布工具
平台中ꎬSOAP(SimpleObjectAccessProtocol)风格接口和Restful风格接口都能得到良好的支持ꎮ
API管理平台通过API发布工具对API进行生命周期管理ꎬ包括开发、发布、管理和监控ꎮ在API管理
JSON的API描述定义已成为Restful风格API的事实性标准ꎮ在业务系统的接口开发中ꎬ通过Swagger相关
工具包ꎬ可自动生成API的描述文档ꎮ接口开发人员可通过将描述定义粘贴到发布工具中ꎬ完成对API的定
义ꎮ
2)对于SOAP风格的接口ꎬ在发布工具中ꎬ可直接通过提供WSDL(WebServicesDescriptionLanguage)
在完成接口定义之后ꎬ接口发布人员可指定接口后
端服务的测试环境地址和生产环境地址ꎬ便于接口使用
者对接口进行测试和正式调用ꎮ考虑到对分布式大规模
系统的支持ꎬ发布工具中允许对各类地址定义多个后端ꎬ
通过负载均衡提供更大的吞吐量和更强的并发性ꎮ
整个API的生命周期包含创建、原型、发布、阻止、弃
用和下线等6个阶段ꎮ各阶段的转换关系见图2ꎮ
API生命周期各阶段的含义如下ꎮ
API用户无法看到对应的APIꎮ
1)创建:API已在平台中定义ꎬ但还没有发布ꎬ此时
图2 API生命周期管理流程
1)对于Restful风格的接口ꎬAPI管理平台通过集成Swagger工具提供支持ꎮ目前ꎬ基于SwaggerYAML/
接口定义的方式完成对API的定义ꎮ
42
上 海 船 舶 运 输 科 学 研 究 所 学 报2020年第4期
可与API用户进行接口原型设计ꎮ
2)原型:API以原型方式发布ꎬ已定义相关的接口ꎬ且通过平台的简单模拟实现对接口的反馈ꎬ该阶段
4)弃用:当API接口后端服务被弃用ꎬ或有新版本的接口上线时ꎬ可弃用老版本的接口ꎮ此时ꎬ新用户
6)阻止:调用被临时禁止ꎬ一般用于接口后端服务需进行临时维护的场景ꎮ
开发者门户为API的调用者提供API浏览和测试的支持ꎮ在开发者门户中ꎬAPI调用者可直接浏览API
3)发布:API接口正式发布ꎬ服务上线ꎮ此时用户可在开发者门户中看到对应的APIꎮ
无法看到该APIꎬ但原用户可继续调用ꎮ
5)下线:API接口终止服务ꎬ无法继续调用ꎮ
1.2 开发者门户
接口的定义ꎬ包括描述信息、参数定义和相关接口文档等ꎮ同时ꎬ通过继承Swagger工具ꎬ调用者可直接在页
面中对API接口进行调用测试ꎮ
在浏览API的同时ꎬAPI调用者可对API接口进行订阅ꎬAPI接口只有在被订阅之后才能调用ꎮ在订阅
时可选择不同的并发等级ꎬ例如300次/s、500次/s等ꎮ不同的订阅等级可对应不同的费用级别ꎬ为后期API
1.3 API网关
管理平台实行计费提供支持ꎮ
API网关可看作一个复杂的反向代理ꎬ在API管理平台中ꎬ所有的API调用都由网关完成ꎮAPI调用者
的调用请求到达网关之后ꎬ由网关完成身份认证、调用并发限制和请求内容检查等操作ꎬ在满足相关要求之
后ꎬ数据被转发至接口的后端服务中ꎬ完成接口调用ꎮ在完成请求转发的同时ꎬ整个调用过程被完整地记录
1.4 身份信息服务
下来ꎬ相关流水信息被发送至统计服务中进行后续分析处理ꎮ
身份信息服务提供对平台整个用户信息体系的管理ꎮAPI管理平台在调用接口过程中ꎬ其身份验证采
用的是OAuth2协议ꎮToken的产生和生命周期管理等均由身份信息服务提供ꎮ同时ꎬ平台支持对单独API
1.5 统计服务
Endpoint进行授权ꎬ相关的权限检查也由身份信息服务完成ꎮ
收到调用流水数据之后ꎬ在内存中进行实时聚合ꎬ并定期写入后台数据库中ꎬ形成各种维度的报表ꎮ
API的调用流水数据由网关产生之后被发送至统计服务中ꎮ统计服务采用流式计算框架Siddhiꎬ在接
同时ꎬ各API接口的健康状况由统计服务进行分析ꎮ通过对得到的流水数据进行分析ꎬ统计服务可获得
各API接口的运行情况ꎬ当出现异常(例如1min内调用量发生急剧变化)时ꎬ能通过邮件等方式及时通知相
1.6 平台部署
容器平台中ꎮ通过充分利用容器平台高可用、高冗余的管理能力
[2]
ꎬAPI管理平台能根据负载进行高效弹性
伸缩和自动故障恢复的部署ꎮ同时ꎬ平台拥有一定的“自愈”能力ꎬ当某个微服务因出现故障而失效时ꎬ容器
云会自动对其进行重启ꎬ实现快速恢复ꎮ在重启期间ꎬ流量会定向至其他正常运行的微服务ꎬ保证服务不
中断ꎮ
结合目前业界流行的容器管理技术ꎬ整个API管理平台以微服务的方式部署在集团内部的Kubernetes
关人员ꎮ
2 平台二次集成研发
通过使用APIM已有组件ꎬ整个API管理平台能满足企业内部的大部分功能需求ꎬ但随着平台的部署实
施和上线使用ꎬ已有组件逐渐无法满足部分管理需求ꎬ如调用流水记录、终端授权、用户信息透传和大数据监
2.1 API调用流水记录
控等ꎮ对此ꎬ还需引入其他组件ꎬ并进行二次集成研发ꎬ对平台的功能进行完善和增强ꎮ
在已有的功能组件中ꎬAPI调用的流水记录仅用于产生统计汇总数据ꎬ原始流水记录并没有保存ꎬ这对
于服务于整个集团的API管理平台而言是一个较大的功能缺失项ꎮ
从使用的便捷性和功能的完整性的角度来说ꎬ日志管理平台首推ELK(ElasticSearch、Logstash、Kibana)ꎮ
通过查阅统计分析服务的相关手册得知ꎬSiddhi支持RDBMS、KAFKA、ES和HTTP等方式的数据输出ꎮ对
李 翔:基于WSO
2
APIM的API全生命周期管理平台架构设计与研发
43
此ꎬ参考已有的统计分析应用ꎬ直接将API的流水记录发送给ElasticSearch集群ꎮ
1)无法对数据的格式进行调整ꎮ由于是直接从统计分析服务中写入ES集群ꎬ中间没有任何数据处理ꎬ
2)稳定性有一定的欠缺ꎮ由于统计分析服务中对流水记录不作任何缓存ꎬ当因某些外部原因导致连接
参考文献[3]ꎬ引入KAFKA组件对消息进行暂存ꎬ借以减轻Logstash的压力ꎬ避免日志在处理之前丢
失ꎮ新的消息传输机制见图3ꎮ
上线运行一段时间之后ꎬ发现该方案存在以下不足:
无法利用Logstash强大的filter插件ꎮ
中断时ꎬ流水记录会丢失ꎮ
消息发送到KAFKA中暂存ꎬ由Logstash消费KAFKA获取流水记录ꎬ经过Filter调整格式之后ꎬ发送至
2.2 单个APIEndpoint的授权
ES集群中进行保存和后续查询分析ꎮ
APIM发布工具可对整个API接口进行授权ꎬ实现不同角色的人员查看不同的APIꎮ但是ꎬ在平台运维
图3 新的消息传输机制
过程中可能会出现一些特殊的权限管理要求ꎬ如API调用对象是一个系统而不是开发者ꎬ需分别对API中的
Endpoint单独授权ꎮ对此ꎬ采用XACML实现ꎮ
可扩展访问控制标记语言(eXtensibleAccessControlMarkupLanguageꎬXACML)定义一种基于属性的声
明性细粒度访问控制策略语言、体系结构和处理模型ꎬ描述如何根据策略中定义的规则评估访问请求
[4]
ꎮ
通过XACMLꎬ可描述如何控制某个具体APIEndpoint的访问权限ꎬ如要求调用者属于某个角色ꎬ或角色名符
合某个表达式等ꎮ
在身份信息服务中ꎬ采用内置的XACML编辑器编写相应的业务控制规则ꎬ如某个APIEndpoint需用户
属于特定的角色ꎮ在规则发布之后ꎬAPI网关将在调用API时按对应的规则检查ꎮ若符合规则要求ꎬ则正常
转发请求至后端服务ꎬ否则返回HttpCode403(Forbidden)ꎬ禁止用户调用该APIEndpointꎮ
XACML编辑器界面见图4ꎮ
图4 XACML编辑器界面
2.3 用户信息透传
由于API管理平台具有透明性ꎬ在后端接口的服务中ꎬ默认无法获取当前调用的用户信息ꎮ一般的API
44
上 海 船 舶 运 输 科 学 研 究 所 学 报2020年第4期
对接流程是ꎬAPI的后端服务不进行身份验证ꎬ由API管理平台实现用户管理ꎬ对于后端系统而言ꎬ所有的接
口调用均匿名ꎮ在部分接口发布过程中ꎬ后端系统明确要求将当前用户的信息传输至后端系统中ꎮ对此ꎬ需
对API管理平台的传输机制进行调整改造ꎮ
APIM平台采用OAuth2.0的身份认证机制ꎬ在默认配置下ꎬ采用AccessToken进行身份信息交互ꎬ简单
将该Token传输至后端系统中无法满足需求ꎮ由此ꎬ对身份验证服务的配置进行调整ꎬ使其在传输调用信息
至后端接口时生成一个包含当前用户信息的JWTTokenꎬ附加在Header中ꎮ后端接口通过对应的Header字
段获取JWTTokenꎬ经过解码之后即可获得相关的用户信息ꎮ
在APIM平台中ꎬ已存在相关的内置类(DefaultClaimsRetriever)实现Token的生成和注入ꎮ由于此内置
类提供的用户属性较少ꎬ不满足业务需求ꎬ需自行编程实现其他属性的注入ꎮ编写相应的Java代码ꎬ继承
APIM框架的AbstractJWTGenerator类ꎬ通过populateStandardClaims方法实现用户指定属性的注入ꎮ相关代
码如下:
tion{
publicMap<StringꎬString>populateStandardClaims(TokenValidationContextvalidationContext)throwsAPIManagementExcep ̄
longcurrentTime=System.currentTimeMillis()ꎻ
longexpireIn=currentTime+getTTL()∗1000ꎻ
StringapplicationId=validationContext.getValidationInfoDTO().getApplicationId()ꎻ
Stringtier=validationContext.getValidationInfoDTO().getTier()ꎻ
StringendUserName=validationContext.getValidationInfoDTO().getEndUserName()ꎻ
StringkeyType=validationContext.getValidationInfoDTO().getType()ꎻ
StringapplicationTier=validationContext.getValidationInfoDTO().getApplicationTier()ꎻ
if(endUserName.endsWith("@carbon.super")){
}
endUserName=endUserName.replace("@carbon.super"ꎬ"")ꎻ
Map<StringꎬString>claims=newLinkedHashMap<StringꎬString>(20)ꎻ
claims.put("applicationid"ꎬapplicationId)ꎻ
claims.put("enduser"ꎬendUserName)ꎻ
claims.put("keytype"ꎬkeyType)ꎻ
claims.put("tier"ꎬtier)ꎻ
claims.put("applicationtier"ꎬapplicationTier)ꎻ
claims.put("exp"ꎬString.valueOf(expireIn))ꎻ
claims.put("version"ꎬvalidationContext.getVersion())ꎻ
returnclaimsꎻ
2.4 API管理平台监控大屏
在发布工具中ꎬAPI管理平台提供对API情况的分析ꎬ可从API调用次数、API调用者和我的API调用
等维度进行统计分析ꎮ但是ꎬ从API管理平台管理的角度出发ꎬ已有的分析数据还不足以反映整个API管理
平台的运行情况ꎮ
为获取已有API的统计数据和实时调用数据ꎬ从系统文档出发ꎬ仔细对API管理平台的开发者门户和统
计服务提供的相关API进行梳理ꎮ针对2个方面的需求ꎬ逐一对照整理ꎬ形成以下结论:
1)对于API数量和分类等静态信息ꎬ可调用开发者门户的接口ꎻ
2)对于API调用次数和最近调用API等动态信息ꎬ可调用统计分析服务的接口ꎮ
}
统计分析服务使用的Siddhi组件采用的是类似大数据的处理方式ꎬ通过调用接口提交一个类SQL语
李 翔:基于WSO
2
APIM的API全生命周期管理平台架构设计与研发
45
句ꎬ可根据要求对统计数据进行汇总计算ꎬ实现监控大屏的数据源获取ꎮ
{
例如ꎬ对于最近调用的API数据ꎬ可通过发送以下请求到统计分析服务中来获取ꎮ
appName:"APIM_ACCESS_SUMMARY"ꎬ
cessTimeDESCꎻ"
}
query:"fromApiLastAccessSummaryonlastAccessTime>1590984000000LselectapiNameꎬlastAccessTimeorderbylastAc ̄
者门户等服务进行数据交互ꎮ最终的API管理平台监控大屏见图5ꎮ
API管理平台监控大屏采用eCharts作为前端开发组件ꎬ采用Node.js开发后端服务ꎬ与统计分析和开发
通过一系列的功能完善ꎬAPI管理平台已能满足整个公司内部的API管理需求ꎮ通过引入Kafka并结
了基础ꎮAPIM组件提供了完整的APIꎬ可实现与其他应用的数据集成ꎮ
图5 API管理平台监控大屏
合ELKꎬ使得API管理平台对API调用流水记录的保存能力明显增强ꎬ为后续基于流水数据的统计分析奠定
3 结 语
目前ꎬAPI管理平台已正式服务于该公司ꎬ共发布API100多个ꎬ接入的相关用户和系统超过60个ꎬ累积
调用次数已接近4000万次ꎮ通过建设API管理平台ꎬ各业务系统间的数据和能力交换得以顺利、高效进
行ꎬ各业务系统的开发效率得到明显提升ꎮ通过引入外部的语音识别和文字识别等OpenAPIꎬ业务系统的服
务能力也得到明显增强ꎮ
API管理平台以微服务架构部署在公司内部的容器云上ꎬ平台的可用性得到了较好的保障ꎬ为公司内各
关键应用提供了高质量的数据服务ꎮ得益于APIM的开放性ꎬAPI管理平台可根据业务需求进行一系列的
增强完善ꎮ通过对API管理平台各组件的数据流进行分析ꎬ并结合行业中的最佳实践ꎬ平台的整体服务能力
得到了进一步提升ꎮ
参考文献:
[1] 黄若虹.开放银行体系构建及商业模式研究[J].区域金融研究ꎬ2020(6):30 ̄35.
41(3):51 ̄57.
[2] 王骏翔ꎬ郭磊.基于Kubernetes和Docker技术的企业级容器云平台解决方案[J].上海船舶运输科学研究所学报ꎬ2018ꎬ
[3] 阮晓龙ꎬ贺路路.基于ELK+Kafka的智慧运维大数据分析平台研究与实现[J].软件导刊ꎬ2020ꎬ19(6):150 ̄154.
[4] 维基百科.XACMLWikipedia[EB/OL].(2020 ̄07 ̄24)[2020 ̄08 ̄09].https://en.wikipedia.org/wiki/XACML.
版权声明:本文标题:基于WSO2 APIM的API全生命周期管理平台架构设计与研发 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1711110052a588996.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论