TOPIC_ID:9, TEAM_ID:1526185410, TEAM_NAME:Radius.
本项目对于赛题 基于 openEuler 的 ABI 检查工具,开发并提供了统一的框架,支持不同语言的插件式扩展,实现了对 Python 包多版本API接口信息导出,差异对比,以及报告呈现(以网页的形式)的功能。对于其他语言,由于框架的泛用性,也能较容易地组合进入本项目。
由于本项目涉及多种编程语言,每种语言的接口形式,库结构有很大不同,所以我们在实现一个统一架构的基础上,对每种语言,使用特定的技术和工具进行处理分析。
架构上,我们对每种语言独立处理,对于分析器,使用 JSON 作为 ABI/API 描述的表示形式;对于比对器,对从分析器得到的 API 描述信息,遍历并进行差分比对,得到 API 增加,移除,修改的信息,对每种 API 变更按照其可能造成的不兼容问题进行分级,使用 JSON 作为 API 差异描述的表示形式。对于报告生成器,根据 API 差异描述的表示形式,生成 HTML(或其他) 形式报告。
我们选择 JSON 作为中间信息表示的原因是 JSON 具有较强的描述结构化数据的能力,并且有很多高效解析,生成 JSON 的工具可用,跨平台,跨语言性很强,利于项目解耦和插件化设计。
我们选择 HTML 作为报告形式的原因是 HTML 交互式强,较 PDF 能展示更多信息,也有利于报告的跨平台阅读以及分发。
由于我们所有中间信息都采用 JSON 进行表示,我们的插件化设计也基于这一点,分析器,比对器,报告生成器均处理或生成统一标准下的 JSON 文件,使得无论插件使用何种语言开发,都能很容易的协作。我们也考虑将核心架构的一部分以 API 形式暴露给开发者,使得其能更容易地进行插件开发。
系统主要由三个部分组成:
由于采用插件化设计,每部分可以有多种实现,或进行相应组合,所以另有一个 Master 工具 api-checker 管理各个插件,协调这三部分的工作,作为最终面向用户的接口。
系统工作流程如下:
输入(包/源码/二进制文件)-> 分析器 -> API 描述文件(JSON) -> 比对器 -> 差异描述文件(JSON) -> 报告生成器 -> 输出报告文件(默认HTML)
具体的系统模块如下:
dotnet run -p ./src/Apidiff.Apps.Web
可直接点击首页的 Dev Diff by Flask 快速访问demo页面。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。