CN110633162B - 远程调用实现方法、装置、计算机设备及存储介质 - Google Patents
远程调用实现方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN110633162B CN110633162B CN201910898269.9A CN201910898269A CN110633162B CN 110633162 B CN110633162 B CN 110633162B CN 201910898269 A CN201910898269 A CN 201910898269A CN 110633162 B CN110633162 B CN 110633162B
- Authority
- CN
- China
- Prior art keywords
- interface
- file
- remote
- local
- local interface
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/549—Remote execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种远程调用实现方法、装置、计算机设备及存储介质,其中,方法包括:获取通过本地接口接收的本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体;根据远端接口请求体,向服务器发起与远端接口匹配的远端接口调用,并获取服务器返回的与远端接口请求体匹配的远端接口返回体;将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并对本地接口返回体进行显示。本发明实施例实现了在不需要手工编写proto描述文件的前提下,使得调用者以本地接口调用的方式,实现远程接口调用。
Description
技术领域
本发明实施例涉及计算机软件技术,尤其涉及一种远程调用实现方法、装置、计算机设备及存储介质。
背景技术
在大多业务操作平台中,业务层需要经常查询数据层中的数据表,以获取业务操作所需的数据。目前,数据层通过谷歌提出的现代、开源、高效的远程过程调用(RemoteProcedure Call,RPC)接口的方式对外提供查询服务,依赖于proto描述文件的定义。在通过proto描述文件生成设定语音的中间文件,例如,pb.go,后,数据层完成pb.go中的接口实现,业务层使用pb.go来完成接口的调用。
发明人在实现本发明的过程中,发现现有技术存在如下缺陷:proto描述文件是需要手工编辑的纯文本文件,虽然纯文本形式的proto描述文件具有高效快速的编解码、设定的数据压缩比以及显式发现数据结构不一致等优点,但应用于具体的业务场景,特别是远程接口数量比较多的场景时,手工编辑会带来很大的时间和人力成本,自动化程度低。
此外,由于proto描述文件需要生成设定语言的中间文件后方可使用,而中间文件中除了包括调用者关心的接口定义信息以外,还自动生成了很多其他的代码片段,站在调用者的角度上,这会带来阅读和使用上的干扰,此外,每次proto描述文件发生更新后,调用者需要拉取最新的proto描述文件并重新生成中间文件,过程繁琐。
发明内容
本发明实施例提供了一种远程调用实现方法、装置、计算机设备及存储介质,在不需要手工编写proto描述文件的前提下,使得调用者以本地接口调用的方式,实现远程接口调用。
第一方面,本发明实施例提供了一种远程调用实现方法,该方法包括:获取通过本地接口接收的本地接口请求体,并将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体;
根据所述远端接口请求体,向服务器发起与所述远端接口匹配的远端接口调用,并获取所述服务器返回的与所述远端接口请求体匹配的远端接口返回体;
将所述远端接口返回体转换为与所述本地接口请求体匹配的本地接口返回体,并对所述本地接口返回体进行显示。
第二方面,本发明实施例还提供了一种远程调用实现装置,该装置包括:请求体转换模块,用于获取通过本地接口接收的本地接口请求体,并将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体;
返回体获取模块,用于根据所述远端接口请求体,向服务器发起与所述远端接口匹配的远端接口调用,并获取所述服务器返回的与所述远端接口请求体匹配的远端接口返回体;
返回体显示模块,用于将所述远端接口返回体转换为与所述本地接口请求体匹配的本地接口返回体,并对所述本地接口返回体进行显示。
第三方面,本发明实施例还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一实施例所述的远程调用实现方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一实施例所述的远程调用实现方法。
本发明实施例通过获取本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体;然后根据远端接口请求体向服务器发起与远端接口匹配的远端接口调用,并获取服务器返回的与远端接口请求体匹配的远端接口返回体;最后将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并显示本地接口返回体。本发明实施例的技术方案实现了在不需要手工编写proto描述文件的前提下,使得调用者以本地接口调用的方式,实现远程接口调用。
附图说明
图1是本发明实施例一中的一种远程调用实现方法的流程图;
图2是本发明实施例二中的一种远程调用实现方法的流程图;
图3是本发明实施例三中的一种远程调用实现装置的结构示意图;
图4是本发明实施例四中的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
为了便于理解,首先将本发明实施例所涉及的具体应用场景,以及各种概念进行简单解释。
本实施例主要涉及业务层通过远端接口调用的方式访问数据层中的数据的情况。一般来说,数据层为服务器端,业务层为各种终端设备端,各种终端设备通过RPC的方式对服务器中存储的数据进行访问或者各种操作,例如,数据的查询或者修改等。可选的,可以通过使用google公司出品的远程过程调用框架(gRPC)实现上述远端接口调用。
在本实施例中,为了在业务层中以本地接口调用的方式调用远程接口,需要实现下述操作:
1、通过本地接口接收本地接口调用请求:在该本地接口调用请求中,最重要的是本地接口请求体,该本地接口请求体中定义了业务层所需要访问的数据层中的数据对象(例如,数据表名,或者数据表中的数据字段名等)。
2、将本地接口请求体转换为远端接口请求体:为了实现对数据层中数据的访问,业务层最终还是需要发起指向该数据层的远端接口调用的,而由于本地接口请求体和远端接口请求体的格式并不完全相同,例如,本地接口调用请求中的本地接口请求体为参数列表或者结构体形式的,而远端接口调用请求中的远端接口请求体为结构体形式的,因此,需要将本地接口请求体转换为远端接口请求体后,生成该远端接口调用请求。
3、根据转换后的远端接口调用请求,发起远端接口调用:通过该远端接口调用,可以实现对该数据层中数据的访问,并向该业务层反馈与该远端接口调用请求匹配的远端接口返回体,例如,如果该远端接口调用请求为对数据表A中工资超过“1万元”的用户的查询请求,则该远端接口返回体中包括对满足工资条件的用户的查询结果(例如,指针形式的,或者数据列表形式的等)。
4、将远端接口返回体转换为本地接口返回体:由于本地接口返回体和远端接口返回体的格式并不完全相同,因此,需要将远端接口返回体转换为本地接口返回体后,以最终作为该本地接口的返回结果,提供给用户进行显示。
实施例一
图1为本发明实施例一提供的一种远程调用实现方法的流程图,本实施例可适用于调用者通过以本地接口调用的方式调用远程接口的情况,该方法可以由远程调用实现装置来执行,该装置可以由软件和/或硬件的方式实现,并一般可以集成在业务层中,用于对数据层中的数据进行访问,该业务层可以为智能手机、平板电脑或者笔记本电脑等智能终端设备端。具体的,参考图1,该方法包括如下步骤:
S110、获取通过本地接口接收的本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体。
需要说明的是,应用程序接口API(Application Programming Interface),就是软件系统不同组成部分衔接的约定。在数据封装时,网络分层中的每个层相互之间会用接口进行交互并提供服务,其中应用层与用户之间的接口称之为应用程序接口。API实际上是一种功能集合,也可说是定义、协议的集合,无论是那种集合,它的实质都是通过抽象为用户屏蔽实现上的细节和复杂性。从用户角度看应用程序接口,表现为一系列API函数,用户可以使用这些函数进行网络应用程序开发。从网络角度看,应用程序接口给用户提供了一组方法,用户可以使用这组方法向应用层发送业务请求、信息和数据,网络中的各层则依次响应,最终完成网络数据传输。可以理解的是,API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件和/或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
其中,计算机程序之间的通信可以分为通过调用本地接口实现的本地过程调用(Local Procedure Call,LPC)和通过调用远端接口实现的远程过程调用(RemoteProcedure Call,RPC);LPC可以用在多任务操作系统中,使得同时运行的任务能互相会话;RPC通过网络通过应用程序的远端接口从远程计算机程序上请求服务。
可选的,远端接口为通过proto描述文件定义的gRPC接口,其中,通过对proto描述文件编译得到设定编程语言的中间文件后,使用该中间文件实现对远端接口的调用。需要说明的是,proto描述文件是纯文本形式的文件,设定编程语言的中间文件可以为go文件或者java文件等。
具体的,本地接口请求体主要用来请求本地接口,可以通过本地接口接收本地接口请求体;通过本地接口获取到本地接口请求体后,将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体。示例性的,本地接口请求体为A,本地接口请求体A通过本地接口B获取,与本地接口B匹配的远端接口为B’,需要将本地接口请求体A转换为远端接口B’的请求体A’。
可选的,将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体,包括:获取与本地接口匹配的远端接口结构体模板,其中,远端接口结构体模板中,包括至少一项待填充参数;使用本地接口请求体中的参数列表,和/或结构体参数,对远端接口结构体模板中的至少一项待填充参数进行赋值,得到远端接口请求体。
示例性的,将本地接口请求体A转换为与本地接口B匹配的远端接口B’的远端接口请求体A’,可以通过获取与本地接口B匹配的远端接口B’的结构体模板,其中,与本地接口B匹配的远端接口B’的结构体模板可以包括至少一项待填充参数,例如,变量类型、变量名等;得到与本地接口B匹配的远端接口B’的结构体模板后可以通过本地接口请求体A中的参数列表,和/或结构体参数对远端接口B’的结构体模板中的至少一项待填充参数进行复制,从而得到远端接口B’的请求体A’。
在一个具体的例子中,通过本地接口接收的本地接口请求体为:
QuerySpByShortName(spId int64,spShortName string)(*CommonDao.SpSlice,*status.Status),该本地接口请求体为一个多参数列表的方法(method);
在该本地接口请求体中,包括(spIdint64,spShort Name string)这一参数列表,在对该本地接口请求体进行转换后,得到的远端接口请求体为:
其中,为了避免重复,将本地接口请求体中的方法名(QuerySpByShortName)添加设定后缀后(例如,“_Reg”),得到远端接口请求体中的方法名(QueryOwnSp ByShortName_Req),使用(spIdint64,spShort Name string)这一参数列表,对设定的远端接口结构体模板进行赋值后,得到上述远端接口请求体。
S120、根据远端接口请求体,向服务器发起与远端接口匹配的远端接口调用,并获取服务器返回的与远端接口请求体匹配的远端接口返回体。
具体的,根据S110得到远端接口请求体后,使用该远端接口请求体向服务器发起与远端接口匹配的远端接口调用,从而实现服务器对远端接口的调用,调用成功后服务器会返回与远端接口请求体匹配的远端接口返回体。
示例性的,可以根据远端接口请求体A’向服务器发起与远端接口B’匹配的远端接口调用,并获取服务器返回的与远端接口请求体A’匹配的远端接口返回体C。
在一个具体的例子中,所述远端接口为通过proto描述文件定义的gRPC接口,相应的,可以通过对所述proto描述文件编译得到设定编程语言的中间文件(例如,pb.go文件)后,使用所述中间文件,实现对所述远端接口的调用。
具体的,如果使用所述中间文件,实现对所述远端接口的调用,需要预先构建用于发起与所述中间文件匹配的gRPC调用请求的代码段。
例如:rsp:=new(CommonDao.SpSlice)
s:=call.RPC(req,rsp,"sp_basic_impl","sp_basic_impl",
"QueryOwnSpByShortName")
return rsp,s
如前所示,上述代码段中只有"QueryOwnSpByShortName"这一内容需要与本地接口请求体中的内容相匹配,因此,上述代码段也可以根据该本地接口请求体,以及对应的填充模板生成,本实施例对此并不进行限制。
S130、将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并对本地接口返回体进行显示。
具体的,将通过S120获得的远端接口返回体转换成与本地接口请求体匹配的本地接口返回体,然后显示本地接口返回体。示例性的,远端接口返回体C转换为本地接口返回体C’,然后显示本地接口返回体C’,可选的,用户可以查看本地接口返回体C’的数据形式,判断是否实现了远程接口调用。
与将本地接口请求体转化为远端接口请求体相类似的方式,可以将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并使用该本地接口实现对本地接口返回体进行显示。
具体的,将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体包括:对远端接口返回体进行字节流解码操作,得到解码后的远端接口返回体,需要说明的是,为了便于传输,远端接口返回体会在服务器中预先编码为字节流,所以需要对远端接口返回体进行字节流解码操作,才能进行后续的步骤。
这样设置的好处在于:现有技术中,针对gRPC接口的实现框架,编程人员一般都会在服务器定义通用的返回头(header)信息,以及错误码统一处理规则,通过上述操作,服务器无需在每个远端接口返回体中都增加错误码和错误描述,远程接口调用的错误码可以在框架中统一处理,也即:所述远端接口返回体在所述服务器中预先编码为字节流。但是上述操作也带来一个问题,实际的远端接口返回体无法在远端接口中显式体现,需要借助注释等手段做信息补全,调用者需要通过接口的注释信息来获知远端接口返回体的真实结构。
在本实施例中,因为实现了远端接口返回体到本地接口返回体的转换,不再需要继续遵循该gRPC接口的实现框架,可以对远端接口返回体进行字节流解码操作,得到解码后的远端接口返回体,以使得用户获取服务器反馈的远端接口返回体的真实结构。
在得到解码后的远端接口返回体,进而可以获取与本地接口匹配的本地接口返回体模板,其中,本地接口返回体模板中包括至少一项待填充参数;最后,使用解码后的远端接口返回体中的至少一项参数对本地接口返回体模板中的至少一项待填充参数进行赋值,得到本地接口返回体。
需要说明的是,本实施例中涉及到的本地接口返回体模板中的至少一项待填充参数与解码后的远端接口返回体中的至少一项参数的参数数量以及参数类型一般是完全匹配的,例如,本地接口返回体模板中包括两项待填充参数需要根据解码后的远端接口返回体中的与本地接口返回体模板中的两项待填充参数相匹配的两项参数进行填充。
可选的,本发明实施例的方法可以通过配置于业务层的脚本文件实现,脚本文件包括接口实现文件以及中间文件;其中,接口实现文件,用于将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体后,使用中间文件向服务器发起远端接口调用,以及将通过中间文件接收的远端接口返回体转换为与本地接口请求体匹配的本地接口返回体。
在上述各实施例的基础上,在获取通过本地接口接收的本地接口请求体,并将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体之前,还可以包括:
获取预先编写的与所述本地接口匹配的原生接口文件;
根据所述原生接口文件,生成与所述本地接口匹配的proto描述文件以及所述接口实现文件,其中,与所述本地接口匹配的proto描述文件用于编译得到与所述本地接口匹配的中间文件。
在本实施例中,考虑到可以根据proto描述文件(.proto)直接生成中间文件,而proto描述文件的数据结构一般是比较规整的,因此,发明人创造性的提出,不再需要人为手工编写该proto描述文件,而是根据用户编写的原生接口文件,自动生成该proto描述文件,进而可以从根本上解决现有技术中proto描述文件的人为编写,人为更新所带来的各种缺陷。
具体的,该proto描述文件以及接口实现文件可以由业务层生成,也可以由数据层生成,还可以由业务层以及数据层共同生成,本实施例对此并不进行限制,在后续实施例中,以业务层生成该接口实现文件为例进行描述。
本实施例的方案通过获取本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体;然后根据远端接口请求体向服务器发起与远端接口匹配的远端接口调用,并获取服务器返回的与远端接口请求体匹配的远端接口返回体;最后将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并显示本地接口返回体,实现了在不需要手工编写proto描述文件的前提下,使得调用者以本地接口调用的方式调用远程接口。
实施例二
图2是本发明实施例提供的一种远程调用实现方法的流程图,本实施例在上述实施例的基础上对本发明实施例进行细化,具体的,参考图2,该方法包括如下步骤:
S210、获取预先编写的与本地接口匹配的原生接口文件。
具体的,在获取通过本地接口接收的本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体之前,还需要获取预先编写的与本地接口匹配的接口文件,在本发明实施例中被称为原生接口文件。
具体的,可以通过原生接口文件定义并实现本地接口。
S220、根据原生接口文件,生成与本地接口匹配的proto描述文件以及接口实现文件。
其中,与本地接口匹配的proto描述文件用于编译得到与所述本地接口匹配的中间文件。
在获取到与本地接口匹配的原生接口文件后,根据原生接口文件生成与本地接口匹配的proto描述文件以及接口实现文件,其中,编译与本地接口匹配的proto描述文件可以得到与本地接口匹配的中间文件。
示例性的,获取与本地接口匹配的原生接口文件Isphelper.go后,根据Isphelper.go生成proto描述文件Sp_basic_impl.proto以及接口实现文件ISpHelper_Impl.go,通过编译Sp_basic_impl.proto描述文件可以得到中间文件sp_basic_impl.pb.go,并可以将该中间文件拷贝到指定目录下,从而准备好业务层依赖的环境。
在本实施例的一个可选的实施方式中,根据所述原生接口文件,生成与所述本地接口匹配的proto描述文件,以及接口实现文件,可以为:
根据本地接口标准库,对原生接口文件进行解析,得到抽象语法树;获取与proto描述文件以及接口实现文件分别匹配的标准模板文件;使用抽象语法树中匹配的树节点的节点值,对与proto描述文件以及接口实现文件分别匹配的标准模板文件进行赋值,得到与本地接口对应的proto描述文件以及接口实现文件。
其中,抽象语法树中的树节点描述原生接口文件的语法结构。在标准模板文件中,包括多项待填充参数,不同的待填充参数对应抽象语法树中的不同树节点的节点值。
示例性的,通过查询本地标准库,并对原生接口文件Isphelper.go进行解析,得到了抽象语法树;然后,分别获取与proto描述文件以及接口实现文件匹配的标准模板文件,然后根据抽象语法树中匹配的树节点的节点值对与proto描述文件以及接口实现文件匹配的标准模板文件进行赋值,得到与本地接口匹配的proto描述文件Sp_basic_impl.proto以及接口实现文件Isphelper_impl.go。
可选的,根据本地接口标准库,对原生接口文件进行解析,得到抽象语法树,具体可以包括:根据本地接口标准库以及原生接口文件中包括的标签信息和/或注释信息对原生接口文件进行解析,从而得到抽象语法树。
具体的,抽象语法树中的树节点可以直接通过本地接口标准库解析得到,也可以通过对用户在原生接口中加入的特定标签的标签信息,或者注释信息进行解析而得到。
在本实施例中,如果原生接口文件按照设定的语法规则进行编写,则通过与该语法规则匹配的本地接口标准库,可以对原生接口文件的语法结构进行解析,得到抽象语法树,该抽象语法树中的树节点的类型可以包括:包名、引用包名、结构类型以及接口类型中的至少一项,每个树节点均具有对应的节点值。
当然,可以理解的时,如果编写的原生接口文件中包括比较复杂的语法结构,该语法结构无法准确、有效的被本地接口标准库所解析得到,则可以人为在上述语法结构中加入标签信息,或者注释信息,通过对该标签信息,或者注释信息进行解析,可以得到与该复杂的语法结构匹配的树节点,以及树节点的节点值。
S230、获取通过本地接口接收的本地接口请求体。
S240、通过接口实现文件,将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体,并使用中间文件向服务器发起远端接口调用。
在一个具体例子中,如果通过本地接口ISpHelper接收的本地接口请求体为:
QueryOwnSpByShortName(spId int64,spShortName string)(*CommonDao.SpSlice,*status.Status);
可以通过使用所述接口实现文件,对应生成下述代码段,以实现将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体,并使用所述中间文件向服务器发起远端接口调用。
具体的,原来本地接口ISpHelper的QueryOwnSpByShortName方法中传入的是spId和spShortName的参数列表,前文所述遇到参数列表形式的本地接口请求体时,需将上述参数列表聚合成结构体,即QueryOwnSpByShortName_Req,为避免重复,这里的命名规则为本地接口方法名加上"_Req"为后缀,再通过QueryOwnSpByShortName方法中的spId和spShortName对QueryOwnSpByShortName_Req结构体进行赋值。也即,生成的远端接口请求体中的结构体形式为:
此外,为了实现使用所述中间文件向服务器发起远端接口调用,同时需要使用上述代码段的下述部分:
rsp:=new(CommonDao.SpSlice)
s:=call.RPC(req,rsp,"sp_basic_impl","sp_basic_impl","QueryOwnSpByShortName")
return rsp,s
在另一个具体的例子中,如果通过本地接口ISpHelper接收的本地接口请求体为:
QueryOwnSpByShortName(int64,string)(*CommonDao.SpSlice,*status.Status)可以通过使用所述接口实现文件,对应生成下述代码段,以实现将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体,并使用所述中间文件向服务器发起远端接口调用。
具体的,原来本地接口ISpHelper的QueryOwnSpByShortName方法中传入的是匿名参数列表(int64,string),相应的,需要根据上述匿名参数列表命名对应的参数后,生成结构体形式的远端接口请求体。可选的,参数命名规则可以为:参数名paramN按顺序追加,赋值时同样按顺序进行即可。
也即,生成的远端接口请求体中的结构体形式为:
对于本地接口请求体为结构体的场景,同样需要生成对应的结构体形式的远端接口请求体。
在另一个具体的例子中,如果通过本地接口ISpHelper接收的本地接口请求体为:
CreateSp(*CreateSpReq)(*ComMsg.ComRet,*status.Status)
可以通过使用所述接口实现文件,对应生成下述代码段,以实现将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体,并使用所述中间文件向服务器发起远端接口调用。
具体的,原来本地接口ISpHelper的QueryOwnSpByShortName方法中传入的是结构体参数(*CreateSpReq),相应的,需要根据结构体参数CreateSpReq中的成员进行了拆解,按照成员变量名赋值到sp_basic_impl.CreateSpReq结构体中,生成结构体形式的远端接口请求体,也即,生成的远端接口请求体中的结构体形式为:
具体的,在生成与本地接口请求体对应的远端接口请求体时,可能需要进行数据类型的适配,例如,将本地接口请求体中int32型的数据,转换为远端接口请求体中int型的数据。
S250、通过接口实现文件,将通过中间文件接收的远端接口返回体转换为与本地接口请求体匹配的本地接口返回体。
本实施例在上述实施例的基础上对本发明实施例进行细化,具体通过获取预先编写的与本地接口匹配的原生接口文件,并根据原生接口文件生成了proto描述文件和接口实现文件;然后获取通过本地接口接收的本地接口请求体;通过接口实现文件将本地接口请求体转换为与本地接口匹配的远端接口请求体,并使用中间文件向服务器发起远端接口调用;最后通过接口实现文件,将通过中间文件接收的远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,从而实现了在不需要手工编写proto描述文件的前提下,使得调用者以本地接口调用的方式,实现远程接口调用,通过获取到的原生接口文件也可以实现定义并实现本地接口。
实施例三
图3是本发明实施例三提供的一种远程调用装置的结构示意图,该装置可以执行本发明实施例任意实施例所述的远程调用实现方法,并且该装置可以通过软件和/或硬件的方式实现,具体的,参考图3,该装置主要包括:请求体转换模块310、返回体获取模块320以及返回体显示模块330。
其中,请求体转换模块310,用于获取通过本地接口接收的本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体;
返回体获取模块320,用于根据远端接口请求体,向服务器发起与远端接口匹配的远端接口调用,并获取服务器返回的与远端接口请求体匹配的远端接口返回体;
返回体显示模块330,用于将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并对本地接口返回体进行显示。
可选的,请求体转换模块310包括远端接口结构体模板获取单元,用于获取与本地接口匹配的远端接口结构体模板,其中,远端接口结构体模板中,包括至少一项待填充参数;
使用本地接口请求体中的参数列表,和/或结构体参数,对远端接口结构体模板中的至少一项待填充参数进行赋值,得到远端接口请求体。
可选的,返回体显示模块330包括远端接口返回体字节流解码单元,用于对远端接口返回体进行字节流的解码操作,得到解码后的远端接口返回体;其中,远端接口返回体在服务器中预先编码为字节流;获取与本地接口匹配的本地接口返回体模板,其中,本地接口返回体模板中,包括至少一项待填充参数;使用解码后的远端接口返回体中的至少一项参数,对本地接口返回体模板中的至少一项待填充参数进行赋值,得到本地接口返回体。
可选的,本发明实施例中涉及到的任意远程调用装置的远端接口为通过proto描述文件定义的gRPC接口;其中,通过对proto描述文件编译得到设定编程语言的中间文件后,使用中间文件,实现对远端接口的调用。
可选的,本发明实施例中涉及到的任意远程调用装置可以通过脚本文件实现本发明实施例中任意实施例所述的远程调用方法,脚本文件中包括:接口实现文件以及中间文件;其中,接口实现文件,用于将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体后,使用中间文件向服务器发起远端接口调用,以及将通过中间文件接收的远端接口返回体转换为与本地接口请求体匹配的本地接口返回体。
可选的,在请求体转换模块310之前还包括:原生接口文件获取模块,用于获取预先编写的与本地接口匹配的原生接口文件;根据原生接口文件,生成与本地接口匹配的proto描述文件以及接口实现文件,其中,与本地接口匹配的proto描述文件用于编译得到与本地接口匹配的中间文件。
可选的,原生接口文件获取模块包括:抽象语法树获取单元、标准模板文件获取单元和proto描述文件以及接口实现文件获得单元;其中:
抽象语法树获取单元,用于根据本地接口标准库,对原生接口文件进行解析,得到抽象语法树,其中,抽象语法树中的树节点描述原生接口文件的语法结构;标准模板文件获取单元,用于获取与proto描述文件以及接口实现文件分别匹配的标准模板文件,其中,在标准模板文件中,包括多项待填充参数,不同的待填充参数对应抽象语法树中的不同树节点的节点值;proto描述文件以及接口实现文件获得单元,用于使用抽象语法树中匹配的树节点的节点值,对与proto描述文件以及接口实现文件分别匹配的标准模板文件进行赋值,得到与本地接口对应的proto描述文件以及接口实现文件。
可选的,抽象语法树获取单元具体可以根据本地接口标准库以及原生接口文件中包括的标签信息和/或注释信息,对原生接口文件进行解析,得到抽象语法树。
可选的,抽象语法树中的树节点的类型包括下述至少一项:包名、引用包名、结构类型以及接口类型。
可选的,在请求体转换模块310之前还可以包括:本地接口实现模块,用于根据原生接口文件定义并实现本地接口。
本发明实施例所提供的远程调用实现装置可执行本发明任意实施例所提供的远程调用实现方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4为本发明实施例四提供的一种计算机设备的结构示意图。图4示出了适于用来实现本发明实施方式的示例性计算机设备12的框图。图4显示的计算机设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的远程调用实现方法,该方法包括:
获取通过本地接口接收的本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体;
根据远端接口请求体,向服务器发起与远端接口匹配的远端接口调用,并获取服务器返回的与远端接口请求体匹配的远端接口返回体;
将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并对本地接口返回体进行显示。
实施例五
本发明实施例五还提供了一种计算机可读存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种远程调用实现方法,该方法包括:
获取通过本地接口接收的本地接口请求体,并将本地接口请求体转换为与本地接口匹配的远端接口的远端接口请求体;
根据远端接口请求体,向服务器发起与远端接口匹配的远端接口调用,并获取服务器返回的与远端接口请求体匹配的远端接口返回体;
将远端接口返回体转换为与本地接口请求体匹配的本地接口返回体,并对本地接口返回体进行显示。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的远程调用实现方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述搜索装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (11)
1.一种远程调用实现方法,其特征在于,包括:获取预先编写的与本地接口匹配的原生接口文件;
根据所述原生接口文件,生成与所述本地接口匹配的proto描述文件以及接口实现文件,其中,与所述本地接口匹配的proto描述文件用于编译得到与所述本地接口匹配的中间文件;
获取通过本地接口接收的本地接口请求体,并通过所述接口实现文件将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体;
根据所述远端接口请求体,使用所述中间文件向服务器发起与所述远端接口匹配的远端接口调用,并获取所述服务器返回的与所述远端接口请求体匹配的远端接口返回体;
通过所述接口实现文件,将通过所述中间文件接收的所述远端接口返回体转换为与所述本地接口请求体匹配的本地接口返回体,并对所述本地接口返回体进行显示;
所述根据所述原生接口文件,生成与所述本地接口匹配的proto描述文件以及所述接口实现文件,具体包括:
根据本地接口标准库,对所述原生接口文件进行解析,得到抽象语法树;其中,所述抽象语法树中的树节点描述所述原生接口文件的语法结构,所述树节点的类型包括:包名、引用包名、结构类型以及接口类型中的至少一项;
获取与proto描述文件以及接口实现文件分别匹配的标准模板文件;
使用抽象语法树中匹配的树节点的节点值,对与proto描述文件以及接口实现文件分别匹配的标准模板文件进行赋值,得到与本地接口对应的proto描述文件以及接口实现文件。
2.根据权利要求1所述的方法,其特征在于,将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体,包括:
获取与所述本地接口匹配的远端接口结构体模板,其中,所述远端接口结构体模板中,包括至少一项待填充参数;
使用所述本地接口请求体中的参数列表,和/或结构体参数,对所述远端接口结构体模板中的至少一项待填充参数进行赋值,得到所述远端接口请求体。
3.根据权利要求1所述的方法,其特征在于,将所述远端接口返回体转换为与所述本地接口请求体匹配的本地接口返回体,包括:
对所述远端接口返回体进行字节流的解码操作,得到解码后的远端接口返回体;其中,所述远端接口返回体在所述服务器中预先编码为字节流;
获取与所述本地接口匹配的本地接口返回体模板,其中,所述本地接口返回体模板中,包括至少一项待填充参数;
使用所述解码后的远端接口返回体中的至少一项参数,对所述本地接口返回体模板中的至少一项待填充参数进行赋值,得到所述本地接口返回体。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述远端接口为通过proto描述文件定义的gRPC接口;
其中,通过对所述proto描述文件编译得到设定编程语言的中间文件后,使用所述中间文件,实现对所述远端接口的调用。
5.根据权利要求4所述的方法,其特征在于,所述方法通过配置于业务层的脚本文件实现,所述脚本文件中包括:接口实现文件以及所述中间文件;
其中,所述接口实现文件,用于将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体后,使用所述中间文件向服务器发起远端接口调用,以及将通过所述中间文件接收的所述远端接口返回体转换为与所述本地接口请求体匹配的本地接口返回体。
6.根据权利要求5所述的方法,其特征在于,
在所述标准模板文件中,包括多项待填充参数,不同的待填充参数对应所述抽象语法树中的不同树节点的节点值。
7.根据权利要求6所述的方法,其特征在于,根据本地接口标准库,对所述原生接口文件进行解析,得到抽象语法树,包括:
根据所述本地接口标准库以及所述原生接口文件中包括的标签信息和/或注释信息,对所述原生接口文件进行解析,得到抽象语法树。
8.根据权利要求1所述的方法,其特征在于,在获取通过本地接口接收的本地接口请求体,并将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体之前,还包括:
根据所述原生接口文件定义并实现所述本地接口。
9.一种远程调用实现装置,其特征在于,包括:
原生接口文件获取模块,用于获取预先编写的与本地接口匹配的原生接口文件;
文件生成模块,用于根据所述原生接口文件,生成与所述本地接口匹配的proto描述文件以及接口实现文件,其中,与所述本地接口匹配的proto描述文件用于编译得到与所述本地接口匹配的中间文件;
请求体转换模块,用于获取通过本地接口接收的本地接口请求体,并通过所述接口实现文件将所述本地接口请求体转换为与所述本地接口匹配的远端接口的远端接口请求体;
返回体获取模块,用于根据所述远端接口请求体,使用所述中间文件向服务器发起与所述远端接口匹配的远端接口调用,并获取所述服务器返回的与所述远端接口请求体匹配的远端接口返回体;
返回体显示模块,用于通过所述接口实现文件,将通过所述中间文件接收的所述远端接口返回体转换为与所述本地接口请求体匹配的本地接口返回体,并对所述本地接口返回体进行显示;
其中,所述文件生成模块具体包括:
抽象语法树获取单元,用于根据本地接口标准库,对所述原生接口文件进行解析,得到抽象语法树;其中,所述抽象语法树中的树节点描述所述原生接口文件的语法结构,所述树节点的类型包括:包名、引用包名、结构类型以及接口类型中的至少一项;
标准模板文件获取单元,用于获取与proto描述文件以及接口实现文件分别匹配的标准模板文件;
proto描述文件以及接口实现文件获得单元,用于使用抽象语法树中匹配的树节点的节点值,对与proto描述文件以及接口实现文件分别匹配的标准模板文件进行赋值,得到与本地接口对应的proto描述文件以及接口实现文件。
10.一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的远程调用实现方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8中任一所述的远程调用实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910898269.9A CN110633162B (zh) | 2019-09-23 | 2019-09-23 | 远程调用实现方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910898269.9A CN110633162B (zh) | 2019-09-23 | 2019-09-23 | 远程调用实现方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110633162A CN110633162A (zh) | 2019-12-31 |
CN110633162B true CN110633162B (zh) | 2022-10-11 |
Family
ID=68972399
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910898269.9A Active CN110633162B (zh) | 2019-09-23 | 2019-09-23 | 远程调用实现方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110633162B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113709085A (zh) * | 2020-05-22 | 2021-11-26 | 成都鼎桥通信技术有限公司 | 远程过程调用处理方法、装置及设备 |
CN113766030B (zh) * | 2021-09-13 | 2023-05-26 | 城云科技(中国)有限公司 | 接口常量参数自动入参方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582318A (zh) * | 2018-12-20 | 2019-04-05 | 武汉斗鱼鱼乐网络科技有限公司 | Portobuf本地化的处理方法、装置、终端及存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101533361A (zh) * | 2009-04-16 | 2009-09-16 | 腾讯科技(深圳)有限公司 | 远程过程调用及生成服务接口信息的方法、系统和设备 |
CN102262560B (zh) * | 2010-05-27 | 2016-12-28 | 阿里巴巴集团控股有限公司 | 一种远程服务的调用方法、装置及系统 |
US9026903B1 (en) * | 2011-01-11 | 2015-05-05 | Google Inc. | Abstract syntax tree interpreter for generating a valid HTML document |
US20120246653A1 (en) * | 2011-03-23 | 2012-09-27 | Infinidat Ltd. | Generic command parser |
US9699249B2 (en) * | 2014-12-05 | 2017-07-04 | Vmware, Inc. | Runtime generation of application programming interfaces for remote procedure call services |
CN107450993A (zh) * | 2017-06-13 | 2017-12-08 | 积成电子股份有限公司 | 一种分布式iec61850通信组件的数据交互方法 |
CN108337236A (zh) * | 2017-12-28 | 2018-07-27 | 杭州马猴烧韭科技有限公司 | 一种基于Protobuf和HTTP/1.1的gRPC调用方法及装置 |
CN109062710B (zh) * | 2018-07-19 | 2021-10-19 | 创新先进技术有限公司 | 一种远程过程调用方法、终端设备及网络设备 |
-
2019
- 2019-09-23 CN CN201910898269.9A patent/CN110633162B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109582318A (zh) * | 2018-12-20 | 2019-04-05 | 武汉斗鱼鱼乐网络科技有限公司 | Portobuf本地化的处理方法、装置、终端及存储介质 |
Non-Patent Citations (6)
Title |
---|
32nd International Conference on Architecture of Computing Systems》.2019, * |
ANALYSING RPC AND TESTING THE PERFORMANCE OF SOLUTIONS;Sandor Kiraly 等;《Informatica》;20181231;第42卷(第4期);555-561 * |
Sangita De 等.Semantic Synergy Exploration in Interface Description Models of Heterogeneus Vehicle Frameworks: Towards Automotive Meta Interface Description Model.《ARCS Workshop 2019 * |
基于SQL的HBase查询的设计与实现;袁兆争 等;《计算机与现代化》;20170721(第7期);20-26,61 * |
自动编码技术在嵌入式系统开发中的应用研究;谢睿;《信息与电脑(理论版) 》;20171008(第19期);31-34 * |
镜像构建系统的设计与实现;吴强;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180215(第2期);I138-910 * |
Also Published As
Publication number | Publication date |
---|---|
CN110633162A (zh) | 2019-12-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7010796B1 (en) | Methods and apparatus providing remote operation of an application programming interface | |
CN114528044B (zh) | 一种接口调用方法、装置、设备及介质 | |
CN110633162B (zh) | 远程调用实现方法、装置、计算机设备及存储介质 | |
CN106649488A (zh) | 多数据源交互接口的调用方法及装置 | |
CN110975293A (zh) | 建立资源引用关系表的方法、装置、服务器及介质 | |
CN113626223A (zh) | 一种接口调用方法和装置 | |
CN110109983B (zh) | 一种操作Redis数据库的方法和装置 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN114489622A (zh) | 静态资源管理方法、Node.js应用、电子设备和存储介质 | |
CN112883088B (zh) | 一种数据处理方法、装置、设备及存储介质 | |
CN111221841A (zh) | 基于大数据的实时处理方法及装置 | |
WO2024124833A1 (zh) | 计算函数构建方法、计算引擎、电子设备及可读存储介质 | |
CN116400914A (zh) | 一种基于数据模型快速构建web应用的方法 | |
CN116010461A (zh) | 数据血缘关系解析方法及装置、存储介质及电子设备 | |
CN113050987B (zh) | 一种接口文档的生成方法、装置、存储介质及电子设备 | |
CN114219643A (zh) | 一种交易调用方法、装置、设备及存储介质 | |
CN112084046B (zh) | 一种分布式计算中泛化接口调用方法及装置 | |
CN114398152A (zh) | 接口仿真服务调用方法及装置 | |
CN110471708B (zh) | 基于可重用组件的配置项获取的方法及装置 | |
KR100545348B1 (ko) | SyncML 서버 어플리케이션 개발을 위한 통합 개발시스템 | |
CN115563183B (zh) | 查询方法、装置及程序产品 | |
CN114003317B (zh) | 内联实现方法及装置、电子设备、存储介质及程序产品 | |
CN117118962B (zh) | 用于跨多个云平台部署用户方法的方法和系统 | |
CN116561106B (zh) | 一种配置项数据管理方法及系统 | |
CN117519691B (zh) | 应用程序处理方法、装置、计算机设备和存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |