CN117850771A - web服务的业务应用开发平台、方法及存储介质 - Google Patents

web服务的业务应用开发平台、方法及存储介质 Download PDF

Info

Publication number
CN117850771A
CN117850771A CN202311559857.2A CN202311559857A CN117850771A CN 117850771 A CN117850771 A CN 117850771A CN 202311559857 A CN202311559857 A CN 202311559857A CN 117850771 A CN117850771 A CN 117850771A
Authority
CN
China
Prior art keywords
script
service
request
application development
platform
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311559857.2A
Other languages
English (en)
Inventor
丰华彬
聂大干
高文
司贺华
周斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
711th Research Institute of CSIC
Original Assignee
711th Research Institute of CSIC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 711th Research Institute of CSIC filed Critical 711th Research Institute of CSIC
Priority to CN202311559857.2A priority Critical patent/CN117850771A/zh
Publication of CN117850771A publication Critical patent/CN117850771A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本申请公开了web服务的业务应用开发平台、方法及存储介质,其中平台包括数据库,存储有web服务的业务脚本;对外通用服务接口,用于接收服务请求;脚本管理模块,用于解析服务请求获取解析结果,根据解析结果对业务脚本执行对应操作,将执行结果返回对外通用服务接口。本申请实现了将后端逻辑代码脚本化,并将脚本化的逻辑与平台逻辑解耦,存放在数据库中,使得业务逻辑可以动态地修改和更新,无需单独安装、编译和配置后端代码,只需要通过对外通用服务接口接收服务请求,通过服务请求传递相关参数,利用脚本管理模块对业务脚本执行相应的操作,简化了部署和维护过程,且通过脚本化逻辑代码可以实现更高度的定制化需求,改善用户体验。

Description

web服务的业务应用开发平台、方法及存储介质
技术领域
本申请属于涉及互联网技术领域,具体涉及web服务的业务应用开发平台、方法及存储介质。
背景技术
B/S架构全称为Browser/Server,即浏览器/服务器架构。通常情况下,极少数事务逻辑在前端实现,主要事务逻辑在服务器端实现。Browser客户端,Web服务器端和DB数据库端构成所谓的三层架构。B/S架构***无须特别安装,只要有Web浏览器即可,显示逻辑交给了Web浏览器,事务处理逻辑放在了Web上,这样就避免了庞大的胖客户端,减少了客户端的压力。正是由于有这些优点,B/S架构在现今的互联网时代越来越流行。但一个服务的创建、实现、测试与部署的过程并不简单。
而现有Web业务逻辑的开发方法通常采用静态语言,在修改了代码逻辑后,需要重新编译后发布。在微服务架构下,整个过程需要花费较长时间,少则几分钟,多则半个多小时。对于一个非常复杂的,代码量以万计的大型项目,现有Web业务逻辑的开发过程对***的稳定、安全和可扩展是非常有益的,但如果业务***非常轻量化,业务代码量以千计,并且类似轻量业务***非常多时,现有Web业务逻辑的开发过程就不适合了。
发明内容
本申请的技术目的在于提供一种web服务的业务应用开发平台和方法,以使开发者可以简单、灵活、高效地完成web服务的业务应用开发。
为实现上述技术目的,本申请采用以下方法。
第一方面,本申请提供了一种web服务的业务应用开发平台,包括:
数据库,所述数据库存储有web服务的业务脚本;
对外通用服务接口,所述对外通用服务接口用于接收服务请求;
脚本管理模块,所述脚本管理模块分别与所述对外通用服务接口和所述数据库连接;所述脚本管理模块用于解析所述服务请求,获取解析结果,根据所述解析结果对所述业务脚本执行对应操作,将执行结果返回所述对外通用服务接口。
第二方面,本申请实施例提供一种web服务的业务应用开发方法,包括:
获取web服务的业务脚本,将所述业务脚本存储于数据库中;
接收服务请求,解析所述服务请求,获取解析结果,根据所述解析结果对所述业务脚本执行对应操作,返回执行结果。
第三方面,本申请实施例提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现如第二方面任意一种可能的实施方式所提供的web服务的业务应用开发方法的步骤。
与现有技术相比,本申请实施例提供的web服务的业务应用开发平台,实现了将后端逻辑代码脚本化,并将脚本化的逻辑与平台逻辑解耦,存放在数据库中,使得业务逻辑可以动态地修改和更新,无需单独安装、编译、打包和部署后端代码,只需要通过对外通用服务接口接收服务请求,通过服务请求传递相关参数,利用脚本管理模块对业务脚本执行相应的操作,简化了部署和维护过程,可以实现功能的快速更新与迭代,且通过脚本化逻辑代码可以实现更高度的定制化需求,提高用户体验。
本申请实施例提供的web服务的业务应用开发方法,实现了后端逻辑代码脚本化,并将脚本化的逻辑与平台逻辑解耦,存放在数据库中;利用对外通用服务接口更新数据库中的业务脚本即可完成后端逻辑代码的修改,可以实现功能的快速更新与迭代。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例一提供的web服务的业务应用开发平台结构示意图;
图2为申请实施例二提供的web服务的业务应用开发平台结构示意图;
图3为申请实施例二提供的web服务的业务应用开发平台结构示意图;
图4为申请实施例二提供的web服务的业务应用开发平台业务脚本执行流程示意图;
图5为申请实施例提供的web服务的业务应用开发平台中缓存模块实现流程示意图;
图6为申请实施例提供的web服务的业务应用开发平台中时序数据库数据查询流程示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
现有Web业务逻辑的开发方法要实现一个Java Web服务,通常需要经过如下过程。
第一步,分析业务需求,设计服务接口;第二步,选择合适的框架(如Spring Boot)搭建服务骨架;第三步,根据接口定义,编写服务接口的具体实现逻辑,包括调用数据库、外部服务等完成业务功能;第四步,针对核心业务逻辑编写单元测试,确保每个接口运行符合预期;第五步,添加安全控制,包括增加参数校验、异常处理、日志记录等,提高服务安全性和鲁棒性;第六步,加入监控指标和报警规则,确保服务运行状态可视化;第七步,如果需要对外提供RPC服务,需要配置服务注册中心,实现服务的自动注册和发现;第八步,编写接口文档,便于调用方理解与使用;第九步:在测试环境中部署服务,并进行集成测试,逐步修复问题。
传统的Java Web开发,业务逻辑通常以Java代码的形式出现在项目中。Java代码作为静态语言,在修改了代码逻辑后,需要重新编译后发布,在微服务架构下,整个过程需要花费较长时间,少则几分钟,多则半个多小时。对于一个非常复杂的,代码量以万计的大型项目,上述过程对***的稳定、安全和可扩展是非常有益的。但如果业务***非常轻量化,业务代码量以千计,并且类似轻量业务***非常多时,传统的Java Web开发过程就不适合了。首先,由于业务逻辑简单,上述过程创建的项目中,真正核心的业务代码占整个项目代码量的比例较低,这些脚手架代码会增加开发者的理解与维护成本;其次,由于业务多而轻,大大加剧了运维的维护成本,并且每个服务都需要使用基本的运行资源,对于有限的硬件资源也是很大的负担。
本申请提供了一种web服务的业务应用开发平台和方法,其中web服务的业务应用开发平台(以下可简称为平台)包括数据库、对外通用服务接口和脚本管理模块。数据库存储有web服务的业务脚本及平台相关的其他配置数据,对外通用服务接口用于接收服务请求,脚本管理模块解析服务请求,获取解析结果,根据解析结果对业务脚本执行对应操作,将执行结果返回对外通用服务接口。基于该平台,开发者可以简单、灵活、高效地完成web服务的业务应用开发。
本申请实施例主要实现了后端逻辑代码脚本化,使用脚本将业务代码从平台逻辑中独立出来存到数据库,通过将脚本化的逻辑与平台逻辑解耦,存放在数据库中,利用对外通用服务接口更新数据库中的业务脚本即可完成后端逻辑代码的修改,可以实现功能的快速更新与迭代。
以下结合说明书附图和具体实施例对本申请做进一步说明。
实施例一
本实施例提供了web服务的业务应用开发平台,如图1所示,包括:数据库、对外通用服务接口和脚本管理模块。
数据库存储有web服务的业务脚本。对外通用服务接口用于接收服务请求。
脚本管理模块分别与对外通用服务接口和数据库连接。脚本管理模块用于解析服务请求获取解析结果,根据解析结果对业务脚本执行对应操作,将执行结果返回对外通用服务接口。
具体实例中,可使用MVEL作为业务逻辑代码的动态脚本语言。先形成web服务的业务脚本,并将业务脚本存储于数据库中。
MVEL(MVFLEX Expression Language)是一种开源的轻量级表达式语言,常用于Java Web平台。
MVEL的主要特征和用途包括:
1.简单易用,语法类似Java语言。
2.支持自定义函数,可以编写函数扩展语言功能。
3.可以直接嵌入Java代码中使用,非侵入式。
4.支持动态类型,不需要预先定义变量类型。
5.运行速度快,解析优化使得性能接近Java。
6.常用于规则引擎中定义规则语言,如Drools、JBoss Rules等。
7.也用于解析和运行EL表达式、JSONPath表达式。
8.提供绑定器将MVEL集成到Java应用中。
9.支持插件扩展语法。
Java Web平台可以编译并缓存MVEL表达式,避免每次都重新解析表达式。与JavaScript类似,MVEL可以非常方便地嵌入到Java代码和应用中,用来定义业务规则、配置、模板、小段逻辑等,是Java世界常用的轻量级脚本语言之一。正是由于MVEL语言有上述优势,具体实例可以选择使用MVEL作为动态脚本语言。
下面是MVEL业务脚本文件格式的一个示例:
//@app tb
//@param tableName{“type”:“string”,“required”:true}:待操作数据表名//@param tableFieldNames:数据字段名
//@anon
//@comment查询表格数据
sqlExp='select`'+utils.string.join('`,`',tableFieldNames)+'`from'+tableName;
data=sql.selectRaw(sqlExp);
return{"data":data}。
MVEL业务脚本配置信息以预设的符号(如本申请实施例采用符号//@)开头,服务器会将这些脚本配置信息解析后存放到数据库中。app表示脚本所属的应用,所有的缓存、配置等信息都以应用为单位进行隔离,脚本中使用config.get默认即读取对应应用的配置。param表示脚本执行时所需的参数。如以上示例,tableName参数、tableFieldNames参数,tableName参数,其后大括号中的内容表示参数信息,type表示参数类型,如int、string等,required表示是否必须由前端(如浏览器)传入,如果是,则前端发送的HTTP请求的body中必须包括所述参数名称指定的参数。
仍以上述示例说明,如果tableName参数后,“required”的值为False,HTTP请求的body中tableName参数可以不填。如果@param tableName{}中设置了默认值(defaultValue),HTTP请求的body中tableName参数的值可用defaultValue值替代,defaultValue值表示如果用户没有传入参数时使用的默认值。脚本文件中@param参数配置信息也可以不指定大括号中的内容,则***默认使用required为ture,类型由前端传入数据决定,不提供默认值,param冒号后面的内容表示参数描述,用于增加可读性,不参与脚本执行。anno表示脚本是否允许匿名执行,如果没有@anon表示不允许脚本匿名执行,即用户在未登录的情况下不能执行该脚本。comment用于描述脚本的功能,不参与脚本执行。参数后不以//开头的行即为执行脚本代码。可选地,业务脚本文件还可以包括注释,//表示注释符,同C、C++、Java等语言的注释。通过return指定返回给前端的对象,接收到的响应的result字段即为该返回结果。return前的代码即为用MVEL编写的逻辑,其中例如sql、utils、config等即为平台封装好的功能模块,开发者可以在脚本中直接使用。
可以理解的是,在一些实施例中,还可以在数据库中存储业务应用开发平台的一些配置信息,如第三方服务地址信息、平台监测配置信息等。
本实施例中,服务请求为HTTP POST请求方式。HTTP(Hypertext TransferProtocol)的POST请求方法允许客户端向服务器提交数据,将请求的数据包含在请求主体中发送给目标URL。
HTTP POST请求一般包括:
请求行:POST请求的请求行中,使用POST方法指定请求的动作。
请求头(Header):请求头中可以包含各种头部字段,如Content-Type、Content-Length、Authorization等,用于描述请求的详细信息。
请求主体(Body):POST请求的数据被包含在请求主体中发送给服务器。请求主体可以携带任何格式的数据,通常使用表单数据(Form Data)或JSON等格式。
MIME类型:根据请求主体中数据的类型,需要设置Content-Type字段来指定数据的MIME类型。常见的类型包括application/x-www-form-urlencoded(用于传输URL编码的表单数据)和application/JSON(用于传输JSON格式的数据)。
数据提交方式:在POST请求中,数据可以通过多种方式提交。常见的方式是使用HTML表单进行提交,或者通过Ajax技术在后台发送POST请求提交数据。
HTTP服务请求必须符合指定格式。本实施例中,服务请求至少包括URL参数、脚本执行类型和脚本名称,且服务请求发送数据的编码方式为JSON类型。JSON(JavaScriptObject Notation,JS对象标记)是一种轻量级的数据交换格式。URL参数为预设的路径,如URL地址的路径部分固定为/sys/onlinterface/execute,脚本执行类型包括执行、新增、删除或修改,如execute表示执行类型为执行。HTTP服务请求中必须有一个query参数interfaceName,其值为MVEL业务脚本名称,***根据该脚本名称从数据库中获取脚本数据。服务请求的content-type必须是application/JSON,请求体也必须是一个JSON对象。
在一些实施例中,为了实现访问控制和权限管理,确保只有授权的人员可以修改和执行逻辑代码,减少潜在的安全漏洞,在MVEL业务脚本配置信息中未设置@anon,则需要对用户进行鉴权。此时,header中必须有X-Access-Token字段,该字段用于请求鉴权。
对外通用接口执行后返回执行结果的格式如下:
{
"success":true,
"message":"",
"code":200,
"result":{},
"timestamp":1676955862043;
}。
其中success字段表示请求是否执行成功,当执行失败时,message会返回执行导致执行失败的文本信息,code表示执行失败的失败码,成功时等于200,result表示执行结果,timestamp表示请求执行的时间戳。
数据库可以选择MySQL数据库,MySQL数据库是一种开源的关系型数据库管理***(RDBMS)。它具有良好的性能、可靠性、安全性和易用性,被广泛用于Web应用程序、企业级***和大数据处理任务等。
本实施例中,对外通用服务接口和脚本管理模块可设置于服务器中的JVM(Java虚拟机)上。JVM是Java平台的关键组成部分,它是一个用于执行Java字节码的虚拟机。JVM在不同的操作***上提供了一致的运行环境,使Java程序可以跨平台地运行。
本申请实现了将后端逻辑代码脚本化,并将脚本化的逻辑与平台逻辑解耦,存放在数据库中,使得业务逻辑可以动态地修改和更新,无需重新部署整个***。这样可以提高***的灵活性和可维护性,能够快速响应业务需求的变化,且无需单独编译、打包和部署后端代码,只需要通过对外通用服务接口接收服务请求,通过服务请求传递相关参数,利用脚本管理模块对业务脚本执行相应的操作,简化了部署和维护过程,且通过脚本化逻辑代码可以实现更高度的定制化需求,提高用户体验。
实施例二
传统的Java开发,代码通常会使用GIT或SVN等版本控制***进行代码的版本管理,以便于在***出现运行问题后可以实现快速回退,也方便后期的问题回溯。而如果将业务逻辑脚本存放在数据库中,就不能通过版本控制***进行管理,因此本实施例提供的web服务的业务应用开发,设计了用于代码仓库与数据库同步的脚本同步模块,使开发者能在自身熟悉的集成开发环境(IDE,Integrated Development Environment)中进行脚本开发,同时也完成了脚本的版本管理目标。该脚本同步模块的运行逻辑如图2所示。
在以上实施例的基础上,本实施例提供的web服务的业务应用开发平台还包括脚本同步模块,脚本同步模块与对外通用服务接口连接;脚本同步模块用于获取已开发完成的新业务脚本,根据新业务脚本向对外通用服务接口发起同步脚本的服务请求。
用户可以选择按自己的喜好选择IDE,如常用的VSCode、IntllijIDEA。通过IDE完成业务逻辑的开发后,用户可以通过业务应用开发平台提供的在线表单管理功能创建一个新的接口记录,然后通过脚本同步模块中的同步工具oli-upload.py将脚本同步到业务应用开发平台,平台负责将脚本数据最终写入到数据库中。
脚本同步模块实现业务脚本同步功能,是通过Python语言实现的,该脚本同步模块的目的是提高MVEL业务脚本的编写效率。例如常用的VSCode编辑器功能强大,支持大量的插件,用户可以用该编辑器快速开发脚本,有语法检查、智能提示、文本高亮显示等功能,用户可以选择自己喜欢的任何编辑器编写脚本,然后通过业务脚本同步工具将该脚本同步到服务器的数据库中。如果不使用业务脚本同步功能,用户只能通过网页的普通文本工具编写脚本,没有上述提到的语法检查、智能提示等功能,将大大降低开发效率。
另外,因为脚本是在本地开发的,因此可以通过git进行管理,实现备份与快照等功能。
在一些实施例中,完成脚本同步后,用户可以使用HTTP API服务测试工具(如Postman、Apipost、Apifox)对接口进行测试。如果测试通过,开发者就可以通过版本管理***提供的工具将代码保存并提交。如果后续发现问题,开发者也可以很方便地将本地代码进行回滚,并使用脚本同步工具将回滚操作也同步到数据库中,这样就可以实现数据库中脚本数据的版本管理了。
同时,为了防止开发者多次将脚本同步到远程仓库,但是在线上出现问题后,由于可能涉及到许多接口变更,开发者不确定需要回滚哪些脚本,因此在一些实施例提供的业务应用开发平台,添加了一个定时任务。该定时任务会在每天凌晨将数据库中的业务脚本进行备份,并存入到远程仓库中,在出现上述情况后,管理员只需要恢复凌晨备份的数据库快照即可撤销当天所有的修改,加强了线上代码的可控性与安全性。
在一些实施例中,如果线上数据库由于意外导致脚本逻辑全部删除,在业务接口非常多时,通过同步工具恢复所有的业务服务效率非常低。因此,可选地,平台还可以包括数据库快照工具,在每天设置的时间点(如每天凌晨)定时地将业务脚本数据库进行备份,当出现上述意外时,就可以通过备份好的数据库快照快速恢复业务服务。
本申请实施例提供的web服务的业务应用开发平台,将业务代码存在数据库中,并通过脚本同步模块,将本地MVEL业务脚本同步到数据库可以实现代码的快速修改,可以实现代码逻辑在不停机状态即可实现切换,在修改完MVEL业务脚本后,部署过程通常只需要几秒钟,与传统方式相比节省了上百倍上线时间。使用Git对脚本进行管理,让存放在数据库中的代码能纳入到版本管理中。通过一个定时任务定时备份脚本,可以保证在数据库中数据丢失后能够快速恢复。
实施例三
在以上实施例的基础上,本实施例提供的web服务的业务应用开发平台,还包括脚本执行模块,如图3所示,脚本执行模块分别与对外通用服务接口和数据库连接;脚本执行模块,用于并对服务请求进行解析,获得请求参数(请求参数包括业务脚本名称、业务脚本配置信息中的参数信息等);根据请求参数从数据库中拉取对应的业务脚本,将请求参数作为业务脚本的执行上下文,执行完业务脚本后向对外通用服务接口返回执行结果。
脚本执行模块执行业务脚本的流程如图4所示。图4示出,对外通用服务接口收到用户的服务请求后,执行业务逻辑的具体流程。首先,脚本执行模块从HTTP请求的URL的query字段获取请求的业务脚本名称,根据业务脚本名称从数据库中查询对应的脚本数据,判断脚本是否存在匿名属性,如果允许匿名,则直接将代码载入虚拟机容器后执行,如果不允许匿名,则从Header中获取token字段,并校验token的正确性,通过校验后才执行脚本代码。
具体执行过程是先将HTTP的body请求体中的请求参数存入内存,即存入类型为Map的上下文变量中,形成脚本执行上下文,之后从数据库中拉取脚本数据,最后将执行权交给脚本。在脚本执行完成后,服务器将执行结果封装为一个HTTP响应返回给浏览器。
实施例四
在以上实施例的基础上,本实施例提供的web服务的业务应用开发平台,可利用浏览器实现更新、修改数据库中的业务脚本。
在实施过程中,对外通用服务接口和脚本管理模块,可以设置于服务器中的虚拟机中。
本实施例提供的平台还包括脚本管理页面(图中未示出),脚本管理页面与脚本管理模块连接;脚本管理页面用于发起新增、删除、修改以及查看脚本的服务请求,以使脚本管理模块执行对应操作;脚本管理页面还用于展示操作对应的执行结果。
可选地,脚本管理页面包括表单模块,表单模块用于新增或修改业务脚本时,接收业务脚本的脚本数据,脚本数据包括业务脚本名称、业务脚本的配置信息以及新增或修改后的业务脚本的脚本逻辑代码,并根据脚本数据发起服务请求。
在本申请实施例提供的web服务的业务应用开发平台上,MVEL业务脚本以应用为单位进行管理,一个脚本必定属于且只属于一个应用。
通过浏览器更新数据库中的业务脚本的过程如下:
开发者可以通过浏览器打开平台的脚本管理页面,通过该页面开发者可以新增、删除、修改、查看脚本。新增或修改脚本时需要利用表单模块填写一个表单,表单中写入业务脚本的脚本数据,脚本数据包括业务脚本名、业务脚本的配置信息、业务脚本的脚本逻辑代码、脚本功能描述。这些脚本数据分别对应上述MVEL业务脚本文件的文件名,具体业务脚本的配置信息@param值,@comment值和@anon值,以及脚本文件内容见以上示例,具体含义不再赘述。
开发人员在完成表单填写后,点击确定按钮,浏览器将向平台发送一个POST类型的HTTP请求。平台在接收到该请求后,将请求转发给脚本管理模块。
脚本管理模块从请求中解析出脚本所属的应用名,如果应用名在数据库不存在,则平台直接返回一个请求出错的响应给浏览器,出错信息为应用不存在。否则,脚本管理模块从服务请求中解析出业务脚本名称和脚本执行类型,如果请求的执行类型为删除脚本,则脚本管理模块到数据库中查询该脚本是否存在。如果不存在,则向浏览器返回请求出错的响应,出错信息为应用不存在。如果在数据库中找到该脚本,则将数据库该脚本对应记录的isDeleted字段设置为1,表示软删除,并向浏览器返回请求成功的响应。
如果服务请求的执行类型为新增或更新脚本,则脚本管理模块也会到数据库中查询脚本是否存在。如果不存在,则会先在数据库中建立一条name等于脚本名,其他字段为空的记录。之后,平台将会校验用户表单中的内容是否合法,例如param的type字段只能为string、int、double等表示类型的字符串,anno字段只能为0或1,表示不允许匿名或允许匿名。如果表单内容不合法,则平台会向浏览器返回请求出错的响应,出错信息会指出用户表单中不合法的原因。如果通过校验,则更新脚本数据,并向浏览器返回请求成功的响应。
在删除或更新脚本请求执行成功后,如果对应的脚本数据已经被缓存在redis中,则脚本管理模块会删除该脚本数据缓存。用户通过一定规则即可组成执行该脚本的URL地址,如组成规则为:HTTP://平台域名:端口号/路径前缀/sys/onlinterface/execute?interfaceName=ScriptName。其中平台域名、端口号和路径前缀与部署相关,部署完成后即可确定,interfaceName为业务脚本名称,通过修改interfaceName的值即可调用不同的脚本。脚本执行参数通过HTTP的body传递给脚本管理模块。
在完成脚本更新后,平台在收到用户对应的业务请求后,如果发现缓存中不存在对应脚本,就会从数据库中查询脚本信息,并缓存到redis中,这样既可以减少数据库访问次数,也实现了用户更新脚本后修改逻辑立即生效,不需要编译、打包、发布等过程。
实施例五
在以上实施例的基础上,如图3所示,本实施例还包括身份认证与权限管理模块,与对外通用服务接口连接;身份认证与权限管理模块被配置用于从服务请求中获取令牌,并校验令牌,根据校验结果允许合法请求,拦截非法请求。
本申请实施例提供的业务应用开发平台,整个平台***可以基于SpringBoot框架进行开发,运行在Java虚拟机上。在一些实施例中,平台基础功能可以包括业务***配置功能、身份认证与权限管理功能、脚本管理功能、数据库管理功能。
可选地,在一些实施例提供的平台中,对业务逻辑中预选的功能(如选择常用的功能)进行了封装,形成一套完备的SDK模块供脚本开发者使用,其中SDK模块包括了缓存管理模块、配置读写模块、HTTP模块、数据库访问模块、时序数据读取模块、工具模块等中的一种或多种,工具模块是多个子模块的合集,例如时间数据转换子模块、数学计算子模块、字符串处理子模块等。
缓存管理模块将修改不频繁的数据存放在内存中,在请求命中有效缓存时,直接将缓存数据返回给用户,减小对数据库和外部服务接口的压力,加快HTTP服务接口的响应速度。缓存模块的实现如图5所示。
配置读写模块提供一个UI界面供开发者修改配置数据库中的数据,修改完成后,平台会将对应的配置缓存清除,后续用户的HTTP请求将按照新的配置值进行处理。
HTTP模块是将平台的HTTP发送POST、GET请求的接口进行封装,在MVEL表达式中可以使用封装后的接口对外发送请求,实现对外部服务接口的调用。
数据库访问模块对MySQL的读写进行封装,开发者只需要在接口中直接写SQL语句就能从数据库中获取数据,不需要预先定义JavaBean作为容器,返回的数据是Map的数组,每条记录都是一个Map,当查询结果有多条记录时返回一个Map对象组成的数组,Map对象的key与数据库的字段field相对应。
在一些实施例中,数据库中存储有TDengine,是涛思数据开发的一款高性能、分布式的物联网、工业大数据平台,时序数据库读取模块主要是指对TDengine的读取,读取流程如图6所示。对于真实测点数据的读取,从数据库中获取到数据后,进行精度与阶码的转换后直接返回。对于由多个测点融合而成的虚拟测点或者需要特殊转换的测点,需要获取所有的依赖测点后,执行用户配置的逻辑计算最终的结果,用户配置逻辑也使用MVEL表达式进行编写。
具体实施例中,利用数据库存储实时测点数据,根据测点数据以及预设的业务逻辑执行业务脚本。
下面的例子是使用MVEL业务脚本快速开发实现时序数据库查询逻辑的一个例子。
在工业物联网应用中,查询时序数据库中指定测点的数据并进行处理是非常常见的应用,测点选择和数据处理逻辑也会非常不同,通过MVEL业务脚本可以快速实现测点的请求逻辑。
用户通过浏览器发送时序数据请求,服务器在收到请求后,从数据库中获取测点信息,如果请求测点不需要融合其他测点的数据,则直接将数据调整阶码和精度后返回给前端。如果请求测点是多数据融合的结果,则从数据库中获取所有依赖测点的值,数据融合逻辑以MVEL业务脚本的形式存放在数据库中。其中融合测点配置如下:
{
monitorName:“dg1Voltage”,
displayName:“DG1电压”,
depends:{"u":"903645","v":"903646","w":"903647"},
formula:“u=(Double)u;v=(Double)v;w=(Double)w;((u*u+v*v+w*w)/3.0)**0.5;”}。
该配置表示DG1电压值依赖于3个测点903645、903646、903647,融合公式由formula指定,该测点的具体含义为DG1的电压由三相电u、v、w融合,formula则为融合公式。通过修改该配置即可快速调整业务脚本执行逻辑。
本申请实施例体提供的平台将业务逻辑中常用的功能封装为SDK,因此开发者在开发MVEL业务脚本时,通常只需要很少的代码量即可实现之前需要大量Java代码才能实现的功能。根据实际使用情况总结,代码量减少了80%以上。更少的代码量降低了开发者的理解成本,提高了开发效率,还减少了调试时间。同时,由于这些函数是被所有业务共用的,因此只需要维护一份代码即可,一个函数的优化可以作用于所有业务***,而不是像传统方式一样,需要同步代码或者重新引入更新版本的包,优化了开发者对代码的管理。
可以理解的是,基于本申请实施例提供的业务应用开发平台,新业务可以基于平台直接开发接口,省去了服务骨架的搭建过程,并且多个业务共享平台服务资源,平台可以提供类FAAS(实现无服务器计算的方法)的计算服务,即"函数即服务",极大地节省了硬件资源;平台可以基于微服务架构,当业务量增长后可以很方便地进行水平扩展,使硬件资源利用率始终保持较高的水平。
Faas是Serverless计算模型的一种实现形式。Faas的主要特征为:1、将应用程序和业务逻辑抽象为无状态的函数,2、函数会被部署到Faas平台,完全由平台管理,3、开发者只需要关注函数代码本身,不需要维护服务器等基础设施,4、在需要执行函数时,向Faas平台发起调用请求,5、Faas平台会自动弹性扩展计算资源来运行函数。
简单来说,Faas允许开发者部署事件驱动的函数代码,并根据具体请求对其进行扩展和执行,完全无需考虑服务器等基础架构的细节,这实现了Serverless计算的模式。使用Faas的可以得到更高的开发效率,无需管理服务器和基础设施,全心专注于编写核心业务逻辑代码。减少重复工作,直接开发独立的功能代码片段即可;更优的资源利用率,资源按需分配,没有资源浪费,不需要为可能用到的最大资源提前分配;减少运维工作量,开发者不需要服务器维护和管理。基础架构层面的高可用性和故障恢复由平台提供。
整个平台项目基于SpringBoot Cloud进行开发,Java版本选择JDK8,使用Nacos作为平台***配置中心和服务发现的注册中心,使用SpringCloud Gateway作为业务网关,使用Redis作为***缓存,使用MySQL进行关系型数据的存储,使用TDengine进行时序数据库的存储,平台对外提供REST API。在生产环境中,平台以微服务的方式部署,Nacos、SpringCloudGateway、平台前后端服务都跑在Docker容器中,通过Kubernetes对容器进行管理。
实施例六
与以上实施例体提供的web服务的业务应用开发平台相对应地,本实施例提供了web服务的业务应用开发平台,方法包括:获取web服务的业务脚本,将业务脚本存储于数据库中;接收服务请求,解析服务请求,获取解析结果,根据解析结果对业务脚本执行对应操作,返回执行结果。
本申请实施例提供的web服务的业务应用开发方法,实现了后端逻辑代码脚本化,并将脚本化的逻辑与平台逻辑解耦,存放在数据库中;利用对外通用服务接口更新数据库中的业务脚本即可完成后端逻辑代码修改,可以实现功能的快速更新与迭代。
进一步地,方法还包括:获取已开发完成的新业务脚本;根据新业务脚本(向对外通用服务接口)发起同步脚本的服务请求。
可选地,方法还包括:开发业务脚本,设置业务脚本的配置信息;配置信息包括业务脚本的应用名称、执行业务脚本时需要参数的参数信息以及脚本是否允许匿名执行;其中,参数信息允许为空;参数信息包括参数名称、参数类型,以及是否必须由服务请求传入,如果是,则服务请求的请求体中必须包括参数名称。
需要说明的是,本申请实施例的业务应用开发方法具体实现过程,可参照以上实施例中业务应用开发方法的各功能模块的功能的相关描述,此处不再赘述。
本申请实施例还提供了一种计算机可读介质,其特征是,其上存储有计算机程序,计算机程序被处理器执行可实现如以上的web服务的业务应用开发方法。
注意到,说明书中对“一个实施例”、“实施例”、“示例实施例”、“一些实施例”等的引用指示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可以不必包括特定特征、结构或特性。而且,这样的短语不必指代同一实施例。此外,当结合实施例描述特定特征、结构或特性时,无论是否明确描述,结合其他实施例来实现这样的特征、结构或特性将在所属领域的技术人员的知识范围内。
提供对本公开的先前描述是为使得本领域任何技术人员皆能够制作或使用本公开。对本公开的各种修改对本领域技术人员来说都将是显而易见的,且本文中所定义的普适原理可被应用到其他变体而不会脱离本公开的精神或范围。由此,本公开并非旨在被限定于本文中所描述的示例和设计,而是应被授予与本文中所公开的原理和新颖性特征相一致的最广范围。

Claims (15)

1.一种web服务的业务应用开发平台,其特征在于,所述平台包括:
数据库,所述数据库存储有web服务的业务脚本;
对外通用服务接口,所述对外通用服务接口用于接收服务请求;
脚本管理模块,所述脚本管理模块分别与所述对外通用服务接口和所述数据库连接;所述脚本管理模块用于解析所述服务请求,获取解析结果,根据所述解析结果对所述业务脚本执行对应操作,将执行结果返回所述对外通用服务接口。
2.根据权利要求1所述的web服务的业务应用开发平台,其特征在于,所述平台还包括:
脚本同步模块,所述脚本同步模块与所述对外通用服务接口连接;
所述脚本同步模块用于获取已开发完成的新业务脚本,根据所述新业务脚本向所述对外通用服务接口发起同步脚本的所述服务请求。
3.根据权利要求1所述的web服务的业务应用开发平台,其特征在于,所述业务脚本包括配置信息以及脚本逻辑代码;
所述配置信息包括所述业务脚本所属的应用名称、执行所述业务脚本时需要参数的参数信息以及所述业务脚本是否允许匿名执行;
其中,所述参数信息允许为空;所述参数信息包括参数名称、参数类型以及是否必须由所述服务请求传入,如果是,则所述服务请求的请求体中必须包含所述参数名称指定的参数。
4.根据权利要求3所述的web服务的业务应用开发平台,其特征在于,所述服务请求为HTTP POST请求方式,所述服务请求至少包括URL参数、脚本执行类型和脚本名称,且所述服务请求发送数据的编码方式为JSON类型;
其中,URL参数为预设的路径,所述脚本执行类型包括执行、新增、删除或修改。
5.根据权利要求1所述的web服务的业务应用开发平台,其特征在于,所述平台还包括:
脚本管理页面,所述脚本管理页面与所述脚本管理模块连接;
所述脚本管理页面用于发起新增、删除、修改以及查看所述业务脚本的服务请求,以使所述脚本管理模块执行对应操作;
所述脚本管理页面还用于展示所述操作对应的执行结果。
6.根据权利要求5所述的web服务的业务应用开发平台,其特征在于,所述脚本管理页面包括:
表单模块;
所述表单模块用于新增或修改所述业务脚本时,接收所述业务脚本的脚本数据,所述脚本数据包括所述业务脚本名称、所述业务脚本的配置信息以及新增或修改后的所述业务脚本的脚本逻辑代码,并根据所述脚本数据发起所述服务请求。
7.根据权利要求1所述的web服务的业务应用开发平台,其特征在于,所述平台还包括:
脚本执行模块,所述脚本执行模块分别与所述对外通用服务接口和所述数据库连接;
所述脚本执行模块,用于对所述服务请求进行解析,获得请求参数;根据所述请求参数从所述数据库中拉取对应的所述业务脚本,将所述请求参数作为所述业务脚本的执行上下文,执行完所述业务脚本后向对外通用服务接口返回执行结果。
8.根据权利要求7所述的web服务的业务应用开发平台,其特征在于,所述平台还包括:
身份认证与权限管理模块,与所述对外通用服务接口连接;
所述身份认证与权限管理模块被配置用于从所述服务请求中获取令牌,并校验所述令牌获得校验结果,根据所述校验结果允许合法请求,拦截非法请求。
9.一种web服务的业务应用开发方法,其特征在于,所述方法包括:
获取web服务的业务脚本,将所述业务脚本存储于数据库中;
接收服务请求,解析所述服务请求,获取解析结果,根据所述解析结果对所述业务脚本执行对应操作,返回执行结果。
10.根据权利要求9所述的业务应用开发方法,其特征在于,所述方法还包括:
获取已开发完成的新业务脚本;
根据所述新业务脚本发起同步脚本的所述服务请求。
11.根据权利要求9所述的业务应用开发方法,其特征在于,所述方法还包括:
开发所述业务脚本,设置所述业务脚本的配置信息;
所述配置信息包括所述业务脚本所属的应用名称、执行所述业务脚本时需要参数的参数信息以及脚本是否允许匿名执行;
其中,所述参数信息允许为空;所述参数信息包括参数名称、参数类型以及是否必须由所述服务请求传入,如果是,则所述服务请求的请求体中必须包括所述参数名称指定的参数。
12.根据权利要求9所述的业务应用开发方法,其特征在于,所述方法包括:利用数据库存储实时测点数据,根据所述测点数据以及预设的业务逻辑执行所述业务脚本。
13.根据权利要求9所述的业务应用开发方法,其特征在于,所述服务请求为HTTP POST请求方式,所述服务请求至少包括URL参数、脚本执行类型和脚本名称,且所述服务请求发送数据的媒体类型为JSON类型;
其中,URL参数为预设的路径,所述脚本执行类型包括执行、新增、删除或修改。
14.根据权利要求9所述的业务应用开发方法,其特征在于,所述方法还包括:从所述服务请求中获取令牌,并校验所述令牌获得校验结果,根据所述校验结果允许合法请求,拦截非法请求。
15.一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现如权利要求9至14中任意一项所述的web服务的业务应用开发方法的步骤。
CN202311559857.2A 2023-11-21 2023-11-21 web服务的业务应用开发平台、方法及存储介质 Pending CN117850771A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311559857.2A CN117850771A (zh) 2023-11-21 2023-11-21 web服务的业务应用开发平台、方法及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311559857.2A CN117850771A (zh) 2023-11-21 2023-11-21 web服务的业务应用开发平台、方法及存储介质

Publications (1)

Publication Number Publication Date
CN117850771A true CN117850771A (zh) 2024-04-09

Family

ID=90527599

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311559857.2A Pending CN117850771A (zh) 2023-11-21 2023-11-21 web服务的业务应用开发平台、方法及存储介质

Country Status (1)

Country Link
CN (1) CN117850771A (zh)

Similar Documents

Publication Publication Date Title
KR102220127B1 (ko) 커스터마이징된 소프트웨어 개발 키트(sdk) 생성을 위한 방법 및 장치
US10866828B2 (en) Extending object-schema-based application programming interfaces (APIs)
US20230036980A1 (en) Micro-frontend system, sub-application loading method, electronic device, computer program product, and computer-readable storage medium
US8060863B2 (en) Conformance control module
US8316079B2 (en) Method and apparatus for reliable mashup
US7895571B2 (en) Method and apparatus for resolving client-side logic
US8826297B2 (en) Creating web services from an existing web site
US20170185507A1 (en) Processing special requests at dedicated application containers
CN112506747B (zh) 一种业务进程监控方法、装置、电子设备及存储介质
KR20140047580A (ko) 다중-서버 예약 시스템 상의 동기화 메커니즘 시스템 및 방법
JP2005505055A (ja) モバイルウェブクライアントに対する方法、装置及びシステム
CN100512115C (zh) 给用户提供业务服务的方法和***
CN112579097A (zh) 软件项目构建方法、装置、存储介质及电子设备
CN108984202B (zh) 一种电子资源分享方法、装置和存储介质
US20210117313A1 (en) Language agnostic automation scripting tool
US20200278969A1 (en) Unified metrics computation platform
Rattanapoka et al. An MQTT-based IoT cloud platform with flow design by Node-RED
Pinandito et al. Framework design for modular web-based application using model-collectionservice-controller-presenter (mccp) pattern
CN117850771A (zh) web服务的业务应用开发平台、方法及存储介质
CN114398152A (zh) 接口仿真服务调用方法及装置
Chakraborty et al. CRUD Operation on WordPress Database Using C# And REST API
US11726776B2 (en) Super-app extension discovery and configuration via source code management platform comments
Xu Web-based billing system exploits mature and emerging technology
Aryal MERN stack with modern web practices
Bondili Online Banking Application with Angular JS, RESTful Web Services and Cassandra Database

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination