CN116166457A - 数据处理方法及相关设备 - Google Patents
数据处理方法及相关设备 Download PDFInfo
- Publication number
- CN116166457A CN116166457A CN202310180612.2A CN202310180612A CN116166457A CN 116166457 A CN116166457 A CN 116166457A CN 202310180612 A CN202310180612 A CN 202310180612A CN 116166457 A CN116166457 A CN 116166457A
- Authority
- CN
- China
- Prior art keywords
- platform
- protocol
- interface
- service
- service request
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供一种数据处理方法及相关设备。所述方法包括:获取第一服务模块的第一服务请求;所述第一服务请求基于第一平台的第一编程语言实现,以及所述第一服务模块基于第一平台的第一编程语言实现;将所述第一服务请求转换为第二服务请求;将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应,所述第二服务请求基于第二平台的第二编程语言实现,以及所述第二服务模块基于所述第二平台的第二编程语言实现。本公开可以在实现跨平台功能服务时,无需跨语言实现功能服务的调用,便于用户使用。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种数据处理方法及相关设备。
背景技术
软件即时服务(Software-as-a-Service,SaaS)是基于互联网提供软件服务的软件应用模式。SaaS服务提供方将应用软件统一部署在服务器上,用户可以通过互联网向服务提供方获取所需的应用软件服务并通过安装在终端设备上的应用软件客户端使用应用软件服务。
目前,市面上基于不同开发平台的多种类型的终端系统,如IOS、安卓、网页端系统等等。因此,应用软件的客户端需要支持在不同类型的终端设备上使用。而每个平台都有各自支持的开发语言,如IOS支持Swift语言、安卓支持Kotlin或Java语言,网页端支持JS语言等,因此在进行应用软件的功能开发时,服务提供方的开发人员在服务端进行功能开发后,还需要针对不同平台上的客户端开发相应的功能代码,导致操作繁琐,且开发周期较长。
发明内容
有鉴于此,本公开的目的在于提出一种数据处理方法及相关设备。
基于上述目的,本公开的第一个方面提供了一种数据处理方法,该方法应用于客户端,包括:
获取第一服务模块的第一服务请求;所述第一服务请求基于第一平台的第一编程语言实现,以及所述第一服务模块基于第一平台的第一编程语言实现;
将所述第一服务请求转换为第二服务请求;
将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应,所述第二服务请求基于第二平台的第二编程语言实现,以及所述第二服务模块基于所述第二平台的第二编程语言实现。
本公开的第二个方面提供了一种数据处理方法,包括:
获取第二服务模块的第一接口参数,所述第二服务模块基于第二平台的第二编程语言实现,所述第一接口参数基于所述第二编程语言生成;
将所述第一接口参数转换为第二接口参数;
基于所述第二接口参数生成面向第一服务模块的第二接口,所述第一服务模块基于第一平台的第一编程语言实现,所述第二接口参数基于所述第一编程语言生成。
本公开的第三个方面提供了一种数据处理装置,包括:
第一获取模块,被配置为:获取第一服务模块的第一服务请求;所述第一服务请求基于第一平台的第一编程语言实现,以及所述第一服务模块基于第一平台的第一编程语言实现;
第一转换模块,被配置为:将所述第一服务请求转换为第二服务请求;
发送模块,被配置为:将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应,所述第二服务模块基于所述第二平台的第二编程语言实现。
本公开的第四个方面提供了一种数据处理工具,包括:
第二获取模块,被配置为:获取第二服务模块的第一接口参数,所述第二服务模块基于第二平台的第二编程语言实现,所述第一接口参数基于所述第二编程语言生成;
第二转换模块,被配置为:将所述第一接口参数转换为第二接口参数;
生成模块,被配置为:基于所述第二接口参数生成面向第一服务模块的第二接口,所述第一服务模块基于第一平台的第一编程语言实现,所述第二接口参数基于所述第一编程语言生成。
本公开的第五个方面提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本公开的第一个方面或第二个方面所述的方法。
本公开的第六个方面提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一个方面或第二个方面所述的方法。
本公开的第七个方面提供了一种计算机程序产品,包括计算机程序指令,其特征在于,当所述计算机程序指令在计算机上运行时,使得计算机执行如第一个方面或第二个方面所述的方法。
从上面所述可以看出,本公开提供的数据处理方法及相关设备,将来自于第一服务模块且基于第一平台的第一编程语言生成的第一服务请求转换为为基于第二平台的第二编程语言生成的第二服务请求,从而使得第二服务模块可以直接基于第二平台的开发语言对该第二服务请求进行响应,而无需跨语言调用,使得在进行客户端的功能开发时,在第一平台和第二平台均可以基于平台的原生语言进行开发,而无需跨语言开发,方便软件功能的跨平台开发,降低功能开发时的操作复杂度,减少开发周期。
附图说明
为了更清楚地说明本公开或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本公开一个示例性实施例提供的数据处理方法的流程示意图。
图2示出了本公开一个示例性实施例提供的数据处理方法的流程示意图。
图3示出了本公开一个示例性实施例提供的数据处理方法的流程示意图。
图4示出了本公开一个示例性实施例提供的系统的结构框图。
图5示出了本公开一个示例性实施例提供的方法的流程示意图。
图6示出了本公开一个示例性实施例提供的数据处理装置的结构框图。
图7示出了本公开一个示例性实施例提供的数据处理装置的结构框图。
图8示出了本公开一个示例性实施例提供的数据处理工具的结构框图。
图9示出了本公开实施例所提供的示例性计算机设备的硬件结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本公开实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
软件即时服务(Software-as-a-Service,SaaS)是基于互联网提供软件服务的软件应用模式。在该模式中,SaaS服务提供方将应用软件部署在服务器上,用户通过设置在终端设备上的客户端来使用服务提供方所提供的应用软件服务。
目前,很多应用软件,例如即时通讯((Instant Messaging,IM)系统、ERP系统等均可以支持不同平台例如IOS、安卓、PC、Web等的使用。但是,每个平台都有各自支持的开发语言,例如:IOS平台需要使用Swift语言开发,安卓平台需要使用Java、Kotlin等语言开发,Web平台需要使用JS语言开发,在安卓平台或PC端利用Flutter框架生成界面时需要使用Dart语言开发。
目前,在进行应用软件的功能开发时,开发人员在服务端采用能够支持跨平台的开发语言,例如C++、Rust进行功能开发,这样就无需对每个平台单独开发功能。但是,由于各个平台都有各自支持的开发语言,因此还需要针对各个不同平台开发相应的功能代码,且在开发时需要跨语言开发,导致操作繁琐,且开发周期较长。
有鉴于此,本公开实施例提供一种数据处理方法,以解决上述问题。如图1、图5所示,所述数据处理方法应用于客户端,包括:
步骤S101,获取第一服务模块的第一服务请求;所述第一服务请求基于第一平台的第一编程语言实现,以及所述第一服务模块基于第一平台的第一编程语言实现。
本实施例中,第一平台可以为原生语言平台,例如可以为IOS、安卓、PC、Web等平台。其中,IOS、安卓、PC、Web等平台均基于各自平台的原生技术进行系统功能的开发,且都有各自支持的开发语言,例如:IOS平台需要使用Swift语言开发,安卓平台需要使用Java、Kotlin等语言开发,Web平台需要使用JS语言开发,在安卓平台或PC端利用Flutter框架生成界面时需要使用Dart语言开发。
第一服务模块为客户端的原生模块,即当客户端设置于支持IOS平台的终端上时,第一服务模块基于Swift语言实现;当客户端设置于支持安卓平台的终端上时,第一服务模块基于Java、Kotlin语言实现;当客户端设置于支持Web平台的终端上时,第一服务模块基于JS语言实现;当第一服务模块设置在安卓平台或PC端,且用于利用Flutter框架生成界面时,第一服务模块基于Dart语言实现。
当通过第一服务模块需要调用第二服务模块的功能服务时,需在第一服务模块上生成第一服务请求,该第一服务请求即基于第一平台的开发语言即第一编程语言实现。例如,当第一平台为IOS平台时,第一服务请求即基于Swift语言生成,该第一服务请求中包括基于Swift语言的各种参数,例如接口参数。其中,接口参数可以包括接口类型、接口函数等参数信息。
步骤S103,将所述第一服务请求转换为第二服务请求。
其中,可以基于预设的协议将第一服务请求转换为第二服务请求,该预设的协议中可以包括第一平台的接口参数与第二平台的接口参数之间的对应关系。
步骤S105,将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应,所述第二服务请求基于第二平台的第二编程语言实现,以及所述第二服务模块基于所述第二平台的第二编程语言实现。
本实施例中,第二平台可以为跨语言平台,第二编程语言可以为能够支持跨平台的开发语言,例如C++、Rust等。第二服务模块为客户端的跨平台模块,其可以基于C++、Rust等跨平台的开发语言实现。
本实施例中,当获取到基于第一平台的第一编程语言所实现的第一服务请求后,将该第一服务请求转换为基于第二平台的第二编程语言所实现的第二服务请求,这样第一服务请求与第二服务模块即支持相同的编程语言,第二服务模块可直接对第一服务请求进行响应。其中,第二服务模块对第一服务请求进行响应,包括利用第二服务模块所提供的资源对第一服务请求进行处理,本实施例对此不作限制。
本实施例中,将来自于第一服务模块且基于第一平台的第一编程语言生成的第一服务请求转换为为基于第二平台的第二编程语言生成的第二服务请求,从而使得第二服务模块可以直接基于第二平台的开发语言对该第二服务请求进行响应,而无需跨语言调用,使得在进行客户端的功能开发时,在第一平台和第二平台均可以基于平台的原生语言进行开发,而无需跨语言开发,方便软件功能的跨平台开发,降低功能开发时的操作复杂度,减少开发周期。
在一些实施例中,步骤S103中将所述第一服务请求转换为第二服务请求,包括:
步骤S201,基于第一协议将所述第一服务请求转换为第一字节流信息;所述第一协议包括所述第一平台的接口参数与协议参数之间的对应关系。
本实施例中,可预先设置第一协议(spec),通过该第一协议来描述第一平台的接口参数与协议参数之间的对应关系。其中,接口参数可以包括接口类型(Type)和接口函数(Function)等信息。因此,可基于第一协议中第一平台的接口参数与协议参数之间的对应关系,将第一服务请求转换为第一平台侧的第一字节流信息。
当第一平台为IOS、安卓、PC、Web等不同类型的平台时,第一协议可分别存储上述平台的接口参数与预设的协议参数之间的对应关系。这样,无论客户端所属的平台即第一平台为哪种平台,均可以将其所生成的第一服务请求转换为第一字节流信息。同时,当新增了其他类型的第一平台时,也仅需在第一协议增加该新增第一平台的接口参数与协议参数之间的对应关系,从而提高了客户端跨平台服务的能力,降低业务跨平台业务逻辑、基础能力复用的技术成本。
在一些实施例中,生成第一字节流信息之后,可将第一字节流信息从第一服务模块侧传输至第二服务模块侧。其中,可以通过预先设置的应用程序二进制接口传输所述第一字节流信息,例如通过C语言的应用程序二进制接口(C ABI)来实现第一字节流信息从第一服务模块侧到第二服务模块侧的传输。
步骤S203,基于所述第一协议将传输后的所述第一字节流信息转换为第二服务请求;所述第一协议包括所述第二平台的接口参数与所述协议参数之间的对应关系,所述第二服务请求基于所述第二平台的第二编程语言实现。
由于第一协议中还定义了所述第二平台的接口参数与所述协议参数之间的对应关系,因此第一字节流信息被传输至第二服务模块侧后,可基于第一协议中定义的第二平台的接口参数与协议参数之间的对应关系,将第一字节流信息转换为基于第二编程语言的第二服务请求。
之后,即可将第二服务请求发送至至第二服务模块,以使得第二服务模块可以对第二服务请求进行响应,从而实现跨平台的功能服务调用。
本实施例中,通过在第一服务模块和第二服务模块之间设置数据处理工具,利用该数据处理工具基于第一协议中设置的第一平台的接口参数与协议参数之间的对应关系,将来自于第一服务模块且基于第一平台的编程语言生成的第一服务请求转换为第一服务模块侧的第一字节流信息后,将该第一字节流信息传输至第二服务模块侧,再通过第一协议中设置的第二平台的接口参数与协议参数之间的对应关系,将第一字节流信息转换为基于第二平台的编程语言生成的第二服务请求,并使得第二服务模块可以基于第二平台的开发语言直接对该第二服务请求进行响应,而无需跨语言调用,方便第二服务模块的功能开发。
在一些实施例中,步骤S101-S105中所述方法应用于属于不同平台的多个客户端中的每个客户端;其中,在所述多个客户端中的任一客户端中:所述第一平台是该客户端所属的平台,所述第一服务模块是基于该客户端所述平台的编程语言实现的;在所述多个客户端中的各个客户端中:所述第二平台是相同的平台。
本实施例中,各个不同的客户端可以属于不同类型的平台,例如客户端可以是IOS、安卓、PC、Web等平台上的客户端;第一服务模块基于客户端所属的平台的编程语言实现的,即第一服务模块基于与IOS、安卓、PC、Web等平台对应的Swift、Java、Kotlin、JS、Dart等语言实现的。而对于各个不同的客户端,其对应的第二平台则是相同的,例如均为Rust平台。
在一些实施例中,以即时通讯(Instant Messaging,IM)软件为例:对于一个即时通讯软件,通常需要设置不同的客户端以适用于不同类型的终端,而各个客户端属于不同类型的平台。例如,对于手机上的客户端,其需要安装在IOS、安卓等平台上;对于电脑上的客户端,其需要安装在PC、Web等平台上。也就是说,本申请中的第一平台可以是IOS、安卓、PC、Web等平台。
当需要对即时通讯软件的功能进行更新时,目前可通过跨平台语言进行软件功能的开发,生成基于Rust平台的用于实现软件功能更新的SDK发布到各个客户端上。其中,跨平台语言例如可以是Rust语言,即本申请的第二平台可以是基于Rust语言的平台,第二服务模块基于Rust语言实现。
当第一平台是IOS平台时,该IOS平台所支持的编程语言(即第一编程语言)为Swift语言,即第一服务模块是基于Swift语言实现的,而无需在第一服务模块实现从Swift语言到Rust语言的功能实现;相应的第一服务模块所生成发送的第一服务请求也是基于Swift语言。本申请中,通过将基于Swift语言的第一服务请求转换为基于Rust语言的第二服务请求,再将基于Rust语言的第二服务请求发送给基于Rust语言的第二服务模块,这样第二服务模块即可直接对该第二服务请求进行响应。
当第一平台是安卓平台时,该安卓平台所支持的编程语言(即第一编程语言)为Java或Kotlin语言,即第一服务模块是基于Java或Kotlin语言实现的,而无需在第一服务模块实现从Java或Kotlin语言到Rust语言的功能实现;相应的第一服务模块所生成发送的第一服务请求也是基于Java或Kotlin语言的。本申请中,通过将基于Java或Kotlin语言的第一服务请求转换为基于Rust语言的第二服务请求,再将基于Rust语言的第二服务请求发送给基于Rust语言的第二服务模块,这样第二服务模块即可直接对该第二服务请求进行响应。
当第一平台是Web平台时,该Web平台所支持的编程语言(即第一编程语言)为JS语言,即第一服务模块是基于JS语言实现的,而无需在第一服务模块实现从JS语言到Rust语言的功能实现;相应的第一服务模块所生成发送的第一服务请求也是基于JS语言的。本申请中,通过将基于JS语言的第一服务请求转换为基于Rust语言的第二服务请求,再将基于Rust语言的第二服务请求发送给基于Rust语言的第二服务模块,这样第二服务模块即可直接对该第二服务请求进行响应。
当第一平台是安卓平台或PC端平台且第一服务模块是基于Flutter框架生成的界面时,第一服务模块基于Dart语言实现,而无需在第一服务模块实现从Dart语言到Rust语言的功能实现;相应的第一服务模块所生成发送的第一服务请求也是基于Dart语言的。本申请中,通过将基于Dart语言的第一服务请求转换为基于Rust语言的第二服务请求,再将基于Rust语言的第二服务请求发送给基于Rust语言的第二服务模块,这样第二服务模块即可直接对该第二服务请求进行响应。
即在本申请中,当即时通讯软件的客户端设置于IOS、安卓、PC、Web等不同类型平台中的一个或者多个平台上时,对于与客户端所属平台通过相同编程语言实现的第一服务模块,可直接基于第一平台的原生语言生成第一服务请求;之后,通过本申请所述方法将基于各个不同类型第一平台的原生语言的第一服务请求转换为基于第二平台的Rust语言的第二服务请求,这样基于Rust语言实现的第二服务模块即可直接对该第二服务请求进行处理和响应。
也就是说,当需要对即时通讯软件的功能进行更新时,通过Rust语言生成基于Rust平台的用于实现软件功能更新的SDK发布到客户端上之后,无需对各个不同类型平台上的客户端进行跨语言的适应性开发,或者在基于不同类型平台进行功能开发时仅需基于第一平台的原生语言进行功能开发,在第二平台侧也仅基于第二平台的语言进行开发,通过本申请的数据处理方法来实现服务请求的转换。
这样,无论客户端所属平台是IOS、安卓、PC、Web等平台中的哪一种第一平台,在客户端的第二服务模块部署基于Rust语言的软件升级SDK时,在客户端的第一服务模块来说,其获得的是基于第一平台的原生语言的参数信息,其开发时仅基于第一平台的原生语言进行开发和调用即可;同时,对于第二服务模块的开发也是仅基于第二平台的原生语言进行开发和调用即可,而无需关注客户端所属平台是IOS、安卓、PC、Web等平台中的哪一种第一平台;即通过本申请所述数据处理方法,无需进行跨语言的开发和调用,从而可以大幅降低业务跨平台业务逻辑和基础能力复用的技术成本。在一些实施例中,步骤S201中所述基于第一协议将所述第一服务请求转换为第一字节流信息,包括:
步骤S301,基于所述第一平台的接口参数与协议参数之间的对应关系,将所述第一服务请求转换为基于所述协议参数的第一子请求信息。
步骤S303,基于预设的数据存储格式以及编码方式,将所述第一子请求信息编码为所述第一字节流信息。
本实施例中,可先基于第一平台的接口参数与协议参数之间的对应关系,将第一服务请求转换为基于协议参数的第一子请求信息。例如,当第一平台为IOS平台时且第一服务请求中所包括的接口参数为64位整数数据类型时,由于该接口参数在Swift编程语言中被设置为Int64,而第一协议中该接口参数被设置为int64,此时所生成的第一子请求信息将该接口参数设置为int64。
之后,再基于预设的数据存储格式以及编码方式将第一子请求信息编码为第一字节流信息,例如可以基于结构化数据存储格式protobuf来生成具有序列化数据结构的第一字节流信息。
在一些实施例中,步骤S203所述基于所述第一协议将传输后的所述第一字节流信息转换为第二服务请求,包括:
步骤S401,基于预设的数据存储格式以及解码方式,将所述第一字节流信息解码为所述第一子请求信息;所述解码方式与所述编码方式配合;
步骤S403,基于所述第二平台的接口参数与所述协议参数之间的对应关系,将所述第一子请求信息转换为所述第二服务请求。
本实施例中,采用与步骤S303中的编码方式相应的解码方式,将第一字节流信息解码为第一子请求信息,再基于第二平台的接口参数与协议参数之间的对应关系,将第一子请求信息转换为第二服务请求。例如,当第二平台基于Rust编程语言时且第一服务请求中所包括的接口参数为64位整数数据类型时,由于该接口参数在Rust编程语言中被设置为i64,而第一协议中该接口参数被设置为int64,此时可将第一子请求信息中的int64转化为i64进而生成基于Rust编程语言的第二服务请求。
在一些实施例中,步骤S203中所述基于所述第一协议将传输后的所述第一字节流信息转换为第二服务请求之后,还包括:对所述第二服务请求的代码文件进行格式化处理,从而保证第二服务请求的代码文件的格式整齐易读。本实施例中,可以预先安装格式化工具,并自动调用格式化工具来将第二服务请求的代码文件格式化后再发送给第二平台。本实施例中,当第二平台基于Rust编程语言时,该格式化工具可以为与Rust编程语言生成的第二服务请求的代码文件的文件类型对应的rustfmt。
在一些实施例中,如图2、图5所示,步骤S105中所述将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应之后,还包括:
步骤S107,获取所述第二服务模块发送的第一返回信息;所述第一返回信息基于所述第二服务模块对所述第二服务请求的响应生成,且基于所述第二平台的第二编程语言实现。
本实施例中,第一返回信息是第二服务模块对第二服务请求进行响应所生成的信息,而第二服务模块基于第二平台的第二编程语言实现,因此该第一返回信息是基于第二平台的开发语言即第二编程语言生成的。例如,当第二平台的开发语言为Rust编程语言时,第一返回信息即使基于Rust编程语言生成的。
其中,第一返回信息可以为响应第二服务请求所生成的返回信息(return),也可以为返回的错误信息(error),本实施例对此不做限制。
步骤S109,将所述第一返回信息转换为第二返回信息。
其中,可以基于预设的协议将第一返回信息转换为第二返回信息,该预设的协议中可以包括第一平台的接口参数与第二平台的接口参数之间的对应关系。
步骤S111,将所述第二返回信息发送给所述第一服务模块,所述第二返回信息基于所述第一平台的第一编程语言实现。
本实施例中,当第二服务模块获取第二服务请求后,可以调用第二服务模块的资源对第二服务请求进行处理和响应,并生成第一返回信息。由于第二服务模块是基于第二编程语言实现的,因此第一返回信息也是基于第二编程语言实现的。获取第一返回信息后,将该第一返回信息转换为基于第一平台的第一编程语言所实现的第二返回信息,第二返回信息与第一服务模块支持相同的编程语言,第一服务模块可以直接对第二返回信息进行处理,而无需进一步进行跨语言的转换。
在一些实施例中,步骤S109中所述将所述第一返回信息转换为第二返回信息,包括:
步骤S501,基于所述第一协议将所述第一返回信息转换为第二字节流信息,所述第一协议包括第二平台的接口参数与所述协议参数之间的对应关系。
本实施例中,由于第一协议中已经定义了所述第二平台的接口参数与所述协议参数之间的对应关系,因此在获取第一返回信息后,可基于第一协议中定义的第二平台的接口参数与协议参数之间的对应关系,将第一返回信息转换为基于第一协议中的协议参数的第二字节流信息,再将第二字节流信息传输至第一平台侧。
在一些实施例中,可以通过所述应用程序二进制接口传输所述第二字节流信息,例如通过C语言的应用程序二进制接口(C ABI)来实现第二字节流信息从第二平台侧到第一平台侧的传输。
步骤S503,基于所述第一协议将所述第二字节流信息转换为第二返回信息,所述第一协议包括所述第一平台的接口参数与协议参数之间的对应关系,所述第二返回信息基于所述第一平台的第一编程语言实现。
本实施例中,由于第一协议中定义了第一平台的接口参数与协议参数之间的对应关系,因此第二字节流信息被传输至第一平台侧之后,可基于该第一平台的接口参数与协议参数之间的对应关系,将第二字节流信息转换为基于第一平台的第一编程语言的第二返回信息,这样第一服务模块在调用该第二返回信息时,可以直接基于其原生编程语言即第一编程语言进行调用,而无需进行跨语言调用,也不必关注第二返回信息传输过程中的细节,便于跨平台服务调用的开发和使用。
在一些实施例中,步骤S501中所述基于所述第一协议将所述第一返回信息转换为第二字节流信息,包括:
步骤S601,基于所述第二平台的接口参数与所述协议参数之间的对应关系,将所述第一返回信息转换为基于所述协议参数的第二子请求信息。
步骤S603,基于预设的数据存储格式以及编码方式,将所述第二子请求信息编码为所述第二字节流信息。
本实施例中,可先基于第二平台的接口参数与协议参数之间的对应关系,将第一返回信息转换为基于协议参数的第二子请求信息。例如,当第二平台基于Rust编程语言时且第一返回信息中所包括的接口参数为64位整数数据类型时,由于该接口参数在Rust编程语言中被设置为i64,而第一协议中该接口参数被设置为int64,此时可将第一返回信息中的i64转化为int64进而生成基于协议参数的第二子请求信息。
之后,再基于预设的数据存储格式以及编码方式将第二子请求信息编码为第二字节流信息,例如可以基于结构化数据存储格式protobuf来生成具有序列化数据结构的第二字节流信息。
例如,当第一平台为IOS平台时且第一服务请求中所包括的接口参数为64位整数数据类型时,由于该接口参数在Swift编程语言中被设置为Int64,而第一协议中该接口参数被设置为int64,此时所生成的第二子请求信息将该接口参数设置为int64。
在一些实施例中,步骤S503中所述基于所述第一协议将所述第二字节流信息转换为第二返回信息,包括:
步骤S701,基于预设的数据存储格式以及解码方式,将所述第二字节流信息解码为所述第二子请求信息;所述解码方式与所述编码方式配合。
步骤S703,基于所述第一平台的接口参数与所述协议参数之间的对应关系,将所述第二子请求信息转换为所述第二返回信息。
本实施例中,可采用与步骤S603中的编码方式相应的解码方式,将第二字节流信息解码为第二子请求信息,再基于第一平台的接口参数与协议参数之间的对应关系,将第二子请求信息转换为第二返回信息。例如,当第一平台为IOS平台时,将第二子请求信息将该接口参数int64转化为基于IOS平台的Swift编程语言中的参数Int64,从而生成包括Int64的基于Swift编程语言的第二返回信息。
在一些实施例中,步骤S503中所述基于所述第一协议将传输后的所述第二字节流信息转换为第二返回信息之后,还包括:对所述第二返回信息的代码文件进行格式化处理,从而保证第二返回信息的代码文件的格式整齐易读。本实施例中,可以预先安装格式化工具,并自动调用格式化工具来将第二返回信息的代码文件格式化后再发送给第一服务模块。本实施例中,可以预先安装多个与不同平台的代码文件的文件类型对应的格式化工具;例如,当第一平台为基于Swift编程语言的IOS平台时,该格式化工具可以为与Swift编程语言生成的第二返回信息的代码文件的文件类型对应的swift-format。
基于同一发明构思,本公开还提供了另一种数据处理方法,该方法应用于数据处理工具。其中,该数据处理工具可以为安装在客户端的SDK。可选的,该数据处理工具安装在客户端的第一服务模块和第二服务模块之间。
如图3所示,所述数据处理方法,包括:
步骤S801,获取第二服务模块的第一接口参数,所述第二服务模块基于第二平台的第二编程语言实现,所述第一接口参数基于所述第二编程语言生成。
步骤S803,将所述第一接口参数转换为第二接口参数。
步骤S805,基于所述第二接口参数生成面向第一服务模块的第二接口,所述第一服务模块基于第一平台的第一编程语言实现,所述第二接口参数基于所述第一编程语言生成。
即在本实施例中,当在客户端上安装上述数据处理工具时,该数据处理工具可以获取第二服务模块中基于第二编程语言实现的第一接口参数,基于数据处理工具内部定义的协议将该第一接口参数转换为基于第一编程语言的第二接口参数,从而可以基于第二接口参数生成基于第一编程语言的第二接口,该接口即为面向第一服务模块的接口;同时,由于第二接口的接口参数与第一服务模块基于相同的编程语言,这样第一服务模块通过该第二接口访问或者调用第二服务模块(即前述实施例所述的数据处理方法所包含的步骤S101-S105)时,其仅需基于第一平台的原生语言进行访问和调用,而无需在第一服务模块即进行跨语言的处理,从而可以大幅降低业务跨平台业务逻辑和基础能力复用的技术成本。
在一些实施例中,步骤S803中所述将所述第一接口参数转换为第二接口参数,包括:
步骤S901,基于第一协议将第一接口参数转换为协议参数;
步骤S903,基于所述第一协议将所述协议参数转换为第二接口参数;
所述第一协议包括:所述第一平台的接口参数与协议参数之间的对应关系,以及,所述第二平台的接口参数与协议参数之间的对应关系。
本实施例中,由于上述数据处理工具中定义了第一协议,而第一协议中分别定义了第一平台的接口参数与协议参数之间的对应关系,以及第二平台的接口参数与协议参数之间的对应关系,这样无论第一平台是哪种平台类型,均可以方便的实现协议参数到第二接口参数的转换。同时,当新增新类型的第一平台时,仅需增加第一协议中第一平台的接口参数与协议参数之间的对应关系,即可自动实现第一接口参数到第二接口参数的转换,从而降低业务跨平台业务逻辑和基础能力复用的技术成本。
在一些实施例中,所述第一平台的类型为多个,且多个不同类型的所述第一平台基于多个不同的第一编程语言实现;
步骤S805中所述基于所述第二接口参数生成面向第一服务模块的第二接口,包括:基于与多个所述第一平台的第一编程语言对应的多个第二接口参数,生成相应的多个第二接口。
本实施例中,第一平台可以为IOS、安卓、PC、Web等多个平台类型,第二平台例如可以为Rust平台。本申请中,可以将基于Rust平台的第一接口参数,转换为与IOS、安卓、PC、Web等多个不同类型平台分别对应的多个第二接口参数,进而生成面向设置在IOS、安卓、PC、Web等多个不同类型平台上第一服务模块的多个不同接口,例如:当第一平台为IOS平台时,该第二接口是基于Swift语言的接口;当第一平台为安卓平台时,该第二接口是基于Java或Kotlin语言的接口;当第一平台为Web平台时,该第二接口是基于JS语言的接口等,本实施例对此不作限制。
图4示出了本公开一个示例性实施例提供的系统的结构框图。图5示出了本公开一个示例性实施例提供的方法的流程示意图。
如图4、图5所示,跨平台系统100包括基于第一平台110的第一服务模块111、基于第二平台130的第二服务模块131以及设置于第一服务模块111和第二服务模块131之间的数据处理工具150,该数据处理工具150可设置于客户端上。
第一平台110可以包括IOS、安卓、PC、Web等平台,IOS、安卓、PC、Web等平台均基于各自平台的原生技术进行系统功能的开发,且都有各自支持的开发语言,例如:IOS平台需要使用Swift语言开发,安卓平台需要使用Java、Kotlin等语言开发,Web平台需要使用JS语言开发,在安卓平台或PC端利用Flutter框架生成界面时需要使用Dart语言开发。
第二平台130能够为第一平台110提供跨平台服务。为了实现跨平台服务,第二平台130通常采用Rust、C++等能够满足跨平台需求的开发语言进行开发,并将Rust、C++等预先实现的功能代码暴露给第一平台110,以便于与IOS、安卓、PC、Web等平台进行更好的适配。
在未设置数据处理工具150之前,以第一平台110为IOS平台为例,当基于IOS平台的第一服务模块111需要调用基于第二平台130的第二服务模块131的功能服务(包括业务逻辑、基础能力等)时,需要通过IOS平台的开发语言Swift去调用第二平台130的开发语言Rust所生成的软件开发工具包(SDK),这种跨语言的服务调用较难实现。
本实施例中,通过在第一服务模块111和第二服务模块131之间设置数据处理工具150,通过数据处理工具150将第二服务模块131中通过Rust语言编写实现的跨平台业务逻辑或基础能力暴露给第一服务模块111,这样第一服务模块111在调用第二服务模块131的功能服务时,仅需基于其原生语言去调用,例如IOS平台可通过Swift去调用通过Swift生成的SDK,而不用调用通过Rust生成的SDK,便于原生平台侧(即第一平台侧)和跨平台服务侧(即第二平台侧)的代码逻辑实现,并大幅度降低业务跨平台业务逻辑、基础能力复用的技术成本。
首先,数据处理工具150预先定义第一协议(spec),通过该第一协议来描述跨平台接口。其中,该第一协议中定义了第一协议中接口类型(Type)、接口函数(Function)与第一平台110的开发语言Rust、第二平台130的开发语言Dart、Swift、Kotlin等的接口类型、接口函数之间的对应关系。这样,当数据处理工具150获取到第二服务模块131的第一接口参数时,可以基于该第一协议将基于Rust的第一接口参数转换为基于第一协议中所定义的接口类型、接口函数的协议参数,再基于第一协议和第一平台110的具体类型将中间代码转换为与第一平台110匹配的第二接口参数,这样第一服务模块111所能够访问的是基于第一平台110的原生语言生成的接口,其在开发、调用相应功能时可以基于其原生平台的语言实现,而无需跨平台跨语言调用。
例如,以接口类型中的64位整数数据类型为例,在第一协议将该接口类型定义为int64,在Rust中将该接口类型定义为i64,在Dart中将该接口类型定义为int,在Swift中将该接口类型定义为Int64,在Kotlin中将该接口类型定义为Long。这样,当数据处理工具150获取到第二服务模块131的代码时,可以基于该第一协议将Rust代码中的i64转换为int64从而生成包括int64的中间代码进行传输;之后数据处理工具150再将包括int64的中间代码转换为与各个不同类型的第一平台110的开发语言对应的代码,例如当第一平台110为IOS平台时,将int64转换为Int64从而生成包括Int64的代码,这样IOS平台在使用该代码时,其是基于Swift生成的代码实现,即可直接基于其原生平台的语言实现,而无需跨平台跨语言调用。
在一些实施例中,第一协议可以采用数据序列化格式编写,例如可以采用YAML(YAML Aint Markup Language)格式编写。
在一些实施例中,第一协议可以为接口描述文件。
当第二平台130通过数据处理工具150向第一服务模块111暴露其业务逻辑或基础能力时,以第二服务模块131提供的功能服务为通用KV数据库为例,可以在第一协议中设置该KV数据库开启数据库、关闭数据库、获取数据、存储数据等功能的接口。其中,开启数据库接口open_squam_ky可以设置为:给定一个数据库文件路径或指定为内存数据库,打开对应数据库并返回指定标识对象squam_kv handle;关闭数据库接口close_squam_kv可以设置为:关闭由开启数据库接口open_squam_kv创建的指定标识对象squam_kv handle,并释放KV数据库的关联资源;获取数据接口get_value_by_key可以设置为:给定指定标识对象squam_kv handle,获取指定键(key)在数据库中对应的键值(value),没有则返回空,失败则抛错;存储数据接口set_value_with_key可以设置为:给定指定标识对象squam_kvhandle,存储指定键(key)及其关联键值(value),如果键(key)已经存在则覆盖已有键值,失败则抛错。
在第一协议中设置该KV数据库的各个接口之后,后续即可基于该第一协议生成第一服务模块111、第二服务模块131的代码。
同时,数据处理工具150中还定义了以下参数:接口描述文件的路径SPEC_FILE、生成代码文件所放目录--out-dir、关闭默认格式化操作--no-format、要生成的原生平台(即第一平台110)侧语言代码--frontend以及要生成的Rust(即第二平台130)侧语言代码--backend。其中,接口描述文件路径SPEC_FILE可以用于表示接口描述文件即第一协议的存储路径;生成代码文件所放目录表示生成的第一平台110侧语言代码或者生成的第二平台130侧语言代码的存放目录,若不提供该目录则可以将生成的代码文件存放在预先设置的默认目录中;关闭默认格式化操作表示可以将系统默认提供的对代码进行格式化操作功能关闭;要生成的第一平台110侧语言代码中包括数据模型定义以及函数接口如何调用第二平台130接口能力的实现逻辑;要生成的第二平台130侧语言代码中包括生成SPEC_FILE在第二平台130的开发语言Rust上的对应数据模型和函数接口定义rust-def,还包括描述第二服务模块131的接口能力通过数据处理工具150暴露给第一服务模块111的开发语言的脚手架代码rust-ffi。
这样,在后续将第二服务模块131的能力开放给第一服务模块111时,数据处理工具150可在获取到来自第一服务模块111或者第二服务模块131的代码文件时,可基于接口描述文件路径SPEC_FILE获取接口描述文件,基于该接口描述文件调用--backend将来自于第二服务模块131的代码文件转化为字节流信息作为Rust侧代码,并将生成的包含Rust侧代码的代码文件存储至生成代码文件所放目录--out-dir;或者,基于该接口描述文件调用--frontend将来自于第一服务模块111的代码转化为字节流信息作为原生平台语言侧代码,并将生成的包含原生平台语言侧代码的代码文件存储至生成代码文件所放目录--out-dir。
本实施例中,数据处理工具150可以基于预设的generate子命令自动实现上述功能并生成相应的Rust侧代码的代码文件以及原生平台语言侧代码的代码文件。其中,可以通过数据处理工具150的cli命令直接生成上述代码文件;或者,配置构建脚本(build-dependencies)的指定依赖后由构建脚本(build.rs)间接生成,再通过include!宏将代码文件引入到源代码中参与编译。其中,cli命令是一个可以在终端上运行的(非图形化界面)二进制程序,能够自动根据第一协议的定义生成各平台相应语言。
本实施例中,所生成的包含Rust侧代码的代码文件rust-def为基于Rust语言的接口定义文件,该接口定义文件即为需要暴露给第一服务模块111的代码文件。之后,基于该接口定义文件rust-def确定用于接口定义实现文件kv.rs,该kv.rs包含了接口定义文件rust-def中接口定义的具体实现,将该接口定义实现文件kv.rs设置在工程src/目录下,其可被数据处理工具150调用执行;同时,对原来设置于工程src/目录下的lib.rs文件的文件内容进行修改,将基于构建脚本(build.rs)生成的squam_kv_ffi.rs文件存储在OUT_DIR目录下,同时还生成了squam_kv.proto.rs文件存储在OUT_DIR目录下,squam_kv_ffi.rs包括将接口定义实现文件kv.rs的能力暴露给其他平台语言的中间产物,squam_kv.proto.rs文件包括代码文件中的代码数据传输时所需要的数据存储格式定义以及编解码实现逻辑。其中,该数据存储格式定义可以为结构化数据存储格式protobuf。
在生成代码文件rust-def之后,基于该结构化数据存储格式将该代码文件rust-def中的代码数据转化为第一字节流信息,并通过预先定义的C语言应用程序二进制接口(CABI)进行传输,从而将该第一字节流信息传输至原生平台侧。
其中,在完成代码转化后,可通过预先设置的格式化工具formatter对生成的代码进行格式化从而保证最终的代码文件整齐,或者,也可调用--no-format从而关闭默认的格式化操作,本实施例对此不做限制。其中,不同文件类型的的代码对应不同的格式化工具,可预先在数据处理工具150中安装多个不同类型的格式化工具来满足不同语言格式文件类型的要求。
在一些实施例中,当第一平台110的原生语言为dart语言时,首先,在目录squam-kv/squam-kv-dart下建立一个空工程,并在该目录下生成三个文件,即squam_kv.pb.dart文件、squam_kv.pbenum.dart文件以及squam_kv.dart文件。其中,squam_kv.pb.dart文件和squam_kv.pbenum.dart文件用于表示数据传输过程中所使用的结构化数据存储格式protobuf在dart语言上的定义以及编解码实现逻辑,通过调用这两个文件实现对第一字节流信息的解码;squam_kv.dart文件基于获取的第一协议即接口描述文件生成,该squam_kv.dart文件是基于dart语言的代码文件,其包含了数据类型和函数接口定义,同时实现了函数接口自动调用Rust对应接口的代码逻辑,以及一些其他辅助代码。再通过对外接口设置命令export将该代码文件squam_kv.dart中的接口暴露出来,这样在开发语言为dart语言的第一服务模块111在调用该接口时,可以直接基于dart语言进行调用,而无需基于Rust语言进行调用,无需跨语言调用。
在一些实施例中,当第一平台110的原生语言为swift语言时,首先在目录squam-kv/squam-kv-swift创建一个空工程,并在该目录下生成三个文件即squam_kv.pb.swift文件、squam_kv.swift文件和squam_kv_ffi.h文件。其中,squam_kv.pb.dart文件用于表示数据传输过程中所使用的结构化数据存储格式protobuf在swift语言上的定义以及编解码实现逻辑,通过调用这两个文件实现对第一字节流信息的解码;squam_kv.swift文件基于获取的第一协议即接口描述文件生成,该squam_kv.swif文件是基于swif语言的代码文件,其包含了数据类型和函数接口定义,同时实现了函数接口自动调用Rust对应接口的代码逻辑以及一些其他辅助代码;squam_kv_ffi.h文件为生成的可供squam_kv.swift文件内部实现使用的C语言应用程序二进制接口(C ABI)。
本实施例中,在使用squam_kv.swift文件中暴露的接口之前,先在配置文件squam-kv-swift.podspec中添加配置项,从而将squam_kv.pb.swift文件、squam_kv.swift文件和squam_kv_ffi.h文件设置为参与源代码编译,将Rust产物即squam_kv_ffi.rs文件和squam_kv.proto.rs文件参与最终二进制链接,并将SwiftProtobuf runtime库引入,通过SwiftProtobuf runtime库实现swift语言下数据模块转换成protobuf二进制格式数据,最后执行pod install命令完成框架工程配置,这样之后即可将squam_kv.swift文件中的接口暴露出来,在开发语言为swift语言的第一服务模块111在调用该接口时,可以直接基于swift语言进行调用,而无需基于Rust语言进行调用,无需跨语言调用。
在一些实施例中,当第一平台110的原生语言为kotlin语言时,首先在目录squam-kv/squam-kv-kotlin创建一个空工程,并在该目录下生成两个文件,即squam_kv.proto文件和squam_kv.kt文件。其中,squam_kv.proto文件用于表示数据传输过程中所使用的结构化数据存储格式protobuf在kotlin语言上的定义;squam_kv.kt文件基于获取的第一协议即接口描述文件生成,该squam_kv.kt文件是基于kotlin语言的代码文件,其包含了数据类型和函数接口定义,同时实现了函数接口自动调用Rust对应接口的代码逻辑,以及一些其他辅助代码。创建完成后,将squam_kv.proto文件和squam_kv.kt文件移动至指定目录。
之后,通过依赖注入工具(例如wire)读取.proto文件(即squam_kv.proto文件)生成相应的.kt代码即(squam_kv.kt和squam_kv.proto)。之后,在build编译配置文件中添加依赖注入工具的依赖和设置,并添加jna依赖,这样以后即可将squam_kv.kt文件中的接口暴露出来,在开发语言为swift语言的第一服务模块111在调用该接口时,可以直接基于kotlin语言进行调用,而无需基于Rust语言进行调用,无需跨语言调用。
需要说明的是,本公开实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本公开实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本公开的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种数据处理装置,该数据处理装置应用于客户端。
参考图6,所述数据处理装置,包括:
第一获取模块11,被配置为:获取第一服务模块的第一服务请求;所述第一服务请求基于第一平台的第一编程语言实现,以及所述第一服务模块基于第一平台的第一编程语言实现;
第一转换模块13,被配置为:将所述第一服务请求转换为第二服务请求;
第一发送模块15,被配置为:将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应,所述第二服务模块基于所述第二平台的第二编程语言实现。
在一些实施例中,所述第一转换模块13,还被配置为:
基于第一协议将所述第一服务请求转换为第一字节流信息;所述第一协议包括所述第一平台的接口参数与协议参数之间的对应关系;
基于所述第一协议将所述第一字节流信息转换为第二服务请求;所述第一协议包括第二平台的接口参数与所述协议参数之间的对应关系,所述第二服务请求基于所述第二平台的第二编程语言实现。
在一些实施例中,所述方法应用于属于不同平台的多个客户端中的每个客户端,其中,
在所述多个客户端中的任一客户端中:所述第一平台是该客户端所属的平台,所述第一服务模块是基于该客户端所属平台的编程语言实现的;
在所述多个客户端中的各个客户端中:所述第二平台是相同的平台。
在一些实施例中,所述第一转换模块13,还被配置为:基于所述第一平台的接口参数与协议参数之间的对应关系,将所述第一服务请求转换为基于所述协议参数的第一子请求信息;基于预设的数据存储格式以及编码方式,将所述第一子请求信息编码为所述第一字节流信息。
在一些实施例中,所述第一转换模块13,还被配置为:基于预设的数据存储格式以及解码方式,将所述第一字节流信息解码为所述第一子请求信息;所述解码方式与所述编码方式配合;基于所述第二平台的接口参数与所述协议参数之间的对应关系,将所述第一子请求信息转换为所述第二服务请求。
在一些实施例中,如图7所示,所述装置还被配置为:
第二获取模块17,被配置为:获取所述第二服务模块发送的第一返回信息;所述第一返回信息基于所述第二服务模块对所述第二服务请求的响应生成,且基于所述第二平台的第二编程语言实现;
第二转换模块19,被配置为:将所述第一返回信息转换为第二返回信息;
第二发送模块21,被配置为:将所述第二返回信息发送给所述第一服务模块,所述第二返回信息基于所述第一平台的第一编程语言实现。
在一些实施例中,所述第二转换模块19,还被配置为:基于所述第一协议将所述第一返回信息转换为第二字节流信息,所述第一协议包括第二平台的接口参数与所述协议参数之间的对应关系;
基于所述第一协议将所述第二字节流信息转换为第二返回信息,所述第一协议包括所述第一平台的接口参数与协议参数之间的对应关系,所述第二返回信息基于所述第一平台的第一编程语言实现。
在一些实施例中,所述第二转换模块19,还被配置为:基于所述第二平台的接口参数与所述协议参数之间的对应关系,将所述第一返回信息转换为基于所述协议参数的第二子请求信息;基于预设的数据存储格式以及编码方式,将所述第二子请求信息编码为所述第二字节流信息。
在一些实施例中,所述第二转换模块19,被配置为:基于预设的数据存储格式以及解码方式,将所述第二字节流信息解码为所述第二子请求信息;所述解码方式与所述编码方式配合;基于所述第一平台的接口参数与所述协议参数之间的对应关系,将所述第二子请求信息转换为所述第二返回信息。
在一些实施例中,所述数据存储格式包括结构化数据存储格式。
在一些实施例中,所述装置,还被配置为:通过预先定义的应用程序二进制接口传输所述第一字节流信息;和/或,通过所述应用程序二进制接口传输所述第二字节流信息。
在一些实施例中,所述基于所述第一协议将传输后的所述第一字节流信息转换为第二服务请求之后,所述装置,还被配置为对所述第二服务请求的代码文件进行格式化处理;
和/或,
所述基于所述第一协议将传输后的所述第二字节流信息转换为第二返回信息之后,所述装置,还被配置为对所述第二返回信息的代码文件进行格式化处理。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种数据处理工具。
参考图8,所述数据处理工具,包括:
第三获取模块31,被配置为:获取第二服务模块的第一接口参数,所述第二服务模块基于第二平台的第二编程语言实现,所述第一接口参数基于所述第二编程语言生成;
第三转换模块33,被配置为:将所述第一接口参数转换为第二接口参数;
生成模块35,被配置为:基于所述第二接口参数生成面向第一服务模块的第二接口,所述第一服务模块基于第一平台的第一编程语言实现,所述第二接口参数基于所述第一编程语言生成。
在一些实施例中,第三转换模块33,还被配置为:
基于第一协议将第一接口参数转换为协议参数;
基于所述第一协议将所述协议参数转换为第二接口参数;
所述第一协议包括:所述第一平台的接口参数与协议参数之间的对应关系,以及,所述第二平台的接口参数与协议参数之间的对应关系。
在一些实施例中,所述第一平台的类型为多个,且多个不同类型的所述第一平台基于多个不同的第一编程语言实现;
所述基于所述第二接口参数生成面向第一服务模块的第二接口,包括:基于与多个所述第一平台的第一编程语言对应的多个第二接口参数,生成相应的多个第二接口。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的方法。
图9示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本公开还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的方法。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例所述的数据处理方法相对应的,本公开还提供了一种计算机程序产品,其包括计算机程序指令。在一些实施例中,所述计算机程序指令可以由计算机的一个或多个处理器执行以使得所述计算机和/或所述处理器执行所述的数据处理方法。对应于所述的数据处理方法各实施例中各步骤对应的执行主体,执行相应步骤的处理器可以是属于相应执行主体的。
上述实施例的计算机程序产品用于使所述计算机和/或所述处理器执行如上任一实施例所述的数据处理方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本公开实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本公开实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本公开实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本公开实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本公开实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本公开实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本公开实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (20)
1.一种数据处理方法,其特征在于,该方法应用于客户端,包括:
获取第一服务模块的第一服务请求;所述第一服务请求基于第一平台的第一编程语言实现,以及所述第一服务模块基于第一平台的第一编程语言实现;
将所述第一服务请求转换为第二服务请求;将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应,所述第二服务请求基于第二平台的第二编程语言实现,以及所述第二服务模块基于所述第二平台的第二编程语言实现。
2.根据权利要求1所述的方法,其特征在于,所述将所述第一服务请求转换为第二服务请求,包括:
基于第一协议将所述第一服务请求转换为第一字节流信息;所述第一协议包括所述第一平台的接口参数与协议参数之间的对应关系;
基于所述第一协议将所述第一字节流信息转换为第二服务请求;所述第一协议包括第二平台的接口参数与所述协议参数之间的对应关系,所述第二服务请求基于所述第二平台的第二编程语言实现。
3.根据权利要求1所述的方法,其特征在于,所述方法应用于属于不同平台的多个客户端中的每个客户端,其中,
在所述多个客户端中的任一客户端中:所述第一平台是该客户端所属的平台,所述第一服务模块是基于该客户端所属平台的编程语言实现的;
在所述多个客户端中的各个客户端中:所述第二平台是相同的平台。
4.根据权利要求2所述的方法,其特征在于,所述基于第一协议将所述第一服务请求转换为第一字节流信息,包括:
基于所述第一平台的接口参数与协议参数之间的对应关系,将所述第一服务请求转换为基于所述协议参数的第一子请求信息;
基于预设的数据存储格式以及编码方式,将所述第一子请求信息编码为所述第一字节流信息。
5.根据权利要求2所述的方法,其特征在于,所述基于所述第一协议将所述第一字节流信息转换为第二服务请求,包括:
基于预设的数据存储格式以及解码方式,将所述第一字节流信息解码为所述第一子请求信息;所述解码方式与所述编码方式配合;
基于所述第二平台的接口参数与所述协议参数之间的对应关系,将所述第一子请求信息转换为所述第二服务请求。
6.根据权利要求1所述的方法,其特征在于,所述将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应之后,还包括:
获取所述第二服务模块发送的第一返回信息;所述第一返回信息基于所述第二服务模块对所述第二服务请求的响应生成,且基于所述第二平台的第二编程语言实现;
将所述第一返回信息转换为第二返回信息;
将所述第二返回信息发送给所述第一服务模块,所述第二返回信息基于所述第一平台的第一编程语言实现。
7.根据权利要求6所述的方法,其特征在于,所述将所述第一返回信息转换为第二返回信息包括:
基于所述第一协议将所述第一返回信息转换为第二字节流信息,所述第一协议包括第二平台的接口参数与所述协议参数之间的对应关系;
基于所述第一协议将所述第二字节流信息转换为第二返回信息,所述第一协议包括所述第一平台的接口参数与协议参数之间的对应关系,所述第二返回信息基于所述第一平台的第一编程语言实现。
8.根据权利要求7所述的方法,其特征在于,所述基于所述第一协议将所述第一返回信息转换为第二字节流信息,包括:
基于所述第二平台的接口参数与所述协议参数之间的对应关系,将所述第一返回信息转换为基于所述协议参数的第二子请求信息;
基于预设的数据存储格式以及编码方式,将所述第二子请求信息编码为所述第二字节流信息。
9.根据权利要求7所述的方法,其特征在于,所述基于所述第一协议将所述第二字节流信息转换为第二返回信息,包括:
基于预设的数据存储格式以及解码方式,将所述第二字节流信息解码为所述第二子请求信息;所述解码方式与所述编码方式配合;
基于所述第一平台的接口参数与所述协议参数之间的对应关系,将所述第二子请求信息转换为所述第二返回信息。
10.根据权利要求4、5、8、9中任一项所述的方法,其特征在于,所述数据存储格式包括结构化数据存储格式。
11.根据权利要求2所述的方法,其特征在于,
所述基于第一协议将所述第一服务请求转换为第一字节流信息之后,还包括:通过预先定义的应用程序二进制接口传输所述第一字节流信息;
所述基于所述第一协议将所述第一字节流信息转换为第二服务请求之后,还包括:对所述第二服务请求的代码文件进行格式化处理。
12.根据权利要求7所述的方法,其特征在于,
所述基于所述第一协议将所述第一返回信息转换为第二字节流信息之后,还包括:通过所述应用程序二进制接口传输所述第二字节流信息;
所述基于所述第一协议将传输后的所述第二字节流信息转换为第二返回信息之后,还包括:对所述第二返回信息的代码文件进行格式化处理。
13.一种数据处理方法,其特征在于,包括:
获取第二服务模块的第一接口参数,所述第二服务模块基于第二平台的第二编程语言实现,所述第一接口参数基于所述第二编程语言生成;
将所述第一接口参数转换为第二接口参数;
基于所述第二接口参数生成面向第一服务模块的第二接口,所述第一服务模块基于第一平台的第一编程语言实现,所述第二接口参数基于所述第一编程语言生成。
14.根据权利要求13所述的方法,其特征在于,所述将所述第一接口参数转换为第二接口参数,包括:
基于第一协议将第一接口参数转换为协议参数;
基于所述第一协议将所述协议参数转换为第二接口参数;
所述第一协议包括:所述第一平台的接口参数与协议参数之间的对应关系,以及,所述第二平台的接口参数与协议参数之间的对应关系。
15.根据权利要求13所述的方法,其特征在于,所述第一平台的类型为多个,且多个不同类型的所述第一平台基于多个不同的第一编程语言实现;
所述基于所述第二接口参数生成面向第一服务模块的第二接口,包括:基于与多个所述第一平台的第一编程语言对应的多个第二接口参数,生成相应的多个第二接口。
16.一种数据处理装置,其特征在于,包括:
第一获取模块,被配置为:获取第一服务模块的第一服务请求;所述第一服务请求基于第一平台的第一编程语言实现,以及所述第一服务模块基于第一平台的第一编程语言实现;
第一转换模块,被配置为:将所述第一服务请求转换为第二服务请求;
第一发送模块,被配置为:将所述第二服务请求发送给第二服务模块以使所述第二服务模块对所述第二服务请求进行响应,所述第二服务模块基于所述第二平台的第二编程语言实现。
17.一种数据处理工具,其特征在于,包括:
第三获取模块,被配置为:获取第二服务模块的第一接口参数,所述第二服务模块基于第二平台的第二编程语言实现,所述第一接口参数基于所述第二编程语言生成;
第三转换模块,被配置为:将所述第一接口参数转换为第二接口参数;
生成模块,被配置为:基于所述第二接口参数生成面向第一服务模块的第二接口,所述第一服务模块基于第一平台的第一编程语言实现,所述第二接口参数基于所述第一编程语言生成。
18.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至12或者13至15任意一项所述的方法。
19.一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,其特征在于,所述计算机指令用于使所述计算机执行权利要求1至12或者13至15任意一项所述的方法。
20.一种计算机程序产品,包括计算机程序指令,其特征在于,当所述计算机程序指令在计算机上运行时,使得计算机执行如权利要求1至12或者13至15任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310180612.2A CN116166457A (zh) | 2023-02-17 | 2023-02-17 | 数据处理方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310180612.2A CN116166457A (zh) | 2023-02-17 | 2023-02-17 | 数据处理方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116166457A true CN116166457A (zh) | 2023-05-26 |
Family
ID=86414525
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310180612.2A Pending CN116166457A (zh) | 2023-02-17 | 2023-02-17 | 数据处理方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116166457A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117270833A (zh) * | 2023-11-21 | 2023-12-22 | 支付宝(杭州)信息技术有限公司 | 服务调用及发布方法、介质和计算机设备 |
-
2023
- 2023-02-17 CN CN202310180612.2A patent/CN116166457A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117270833A (zh) * | 2023-11-21 | 2023-12-22 | 支付宝(杭州)信息技术有限公司 | 服务调用及发布方法、介质和计算机设备 |
CN117270833B (zh) * | 2023-11-21 | 2024-04-26 | 支付宝(杭州)信息技术有限公司 | 服务调用及发布方法、介质和计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210232369A1 (en) | Development Environment for Real-Time Dataflow Programming Language | |
CN109656538B (zh) | 应用程序的生成方法、装置、系统、设备和介质 | |
CN111176626B (zh) | 跨编程语言的代码调用方法及装置、介质、设备 | |
CN111338623B (zh) | 一种开发用户界面的方法、装置、介质和电子设备 | |
CN111176629B (zh) | 一种应用开发的方法和装置 | |
CN111399840B (zh) | 一种模块开发方法及装置 | |
KR20160058744A (ko) | 코드 가상화 및 원격 프로세스 호출 생성을 위한 방법 및 장치 | |
US9491222B2 (en) | System and method for interoperability between flex applications and .NET applications | |
CN108829467B (zh) | 第三方平台对接实现方法、装置、设备及存储介质 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
CN111857658A (zh) | 一种渲染动态组件的方法、装置、介质和电子设备 | |
CN111913741A (zh) | 对象拦截方法、装置、介质及电子设备 | |
CN117093286B (zh) | 插件生成方法、装置、设备及计算机可读存储介质 | |
CN112395098A (zh) | 应用程序接口调用方法、装置、存储介质和电子设备 | |
CN111506368B (zh) | 对异步调用转同步调用的方法、装置、设备及存储介质 | |
CN116166457A (zh) | 数据处理方法及相关设备 | |
CN112114789B (zh) | 一种业务开发方法及设备 | |
KR20130003836A (ko) | 어플리케이션 배포 시스템 및 방법 | |
CN116841559A (zh) | 代码转换方法、装置、设备、介质和程序产品 | |
Fu et al. | Research on audio/video codec based on Android | |
CN111782196A (zh) | 基于mvp架构的开发方法及装置 | |
CN114443316B (zh) | 一种对象访问方法、装置及电子设备 | |
CN117056317B (zh) | 数据处理方法、装置、设备及计算机可读存储介质 | |
CN112688863B (zh) | 网关数据处理方法、装置及电子设备 | |
CN117075912B (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 |