CN113300812A - 一种业务接口报文处理方法及装置 - Google Patents

一种业务接口报文处理方法及装置 Download PDF

Info

Publication number
CN113300812A
CN113300812A CN202110568892.5A CN202110568892A CN113300812A CN 113300812 A CN113300812 A CN 113300812A CN 202110568892 A CN202110568892 A CN 202110568892A CN 113300812 A CN113300812 A CN 113300812A
Authority
CN
China
Prior art keywords
interface
service
message
output
input
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
CN202110568892.5A
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.)
WeBank Co Ltd
Original Assignee
WeBank Co Ltd
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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN202110568892.5A priority Critical patent/CN113300812A/zh
Publication of CN113300812A publication Critical patent/CN113300812A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/0078Avoidance of errors by organising the transmitted data in a format specifically designed to deal with errors, e.g. location
    • H04L1/0084Formats for payload data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/0078Avoidance of errors by organising the transmitted data in a format specifically designed to deal with errors, e.g. location
    • H04L1/0079Formats for control data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/12Arrangements for detecting or preventing errors in the information received by using return channel
    • H04L1/16Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
    • H04L1/1607Details of the supervisory signal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/6245Modifications to standard FIFO or LIFO

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本发明实施例提供了一种业务接口报文处理方法及装置,该方法包括接收业务请求信息,根据业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化业务请求报文的接口输入报文格式规则,按照接口输入报文格式规则,将业务请求报文反序列化为业务接口的输入报文对象,调用业务接口的业务处理逻辑,对输入报文对象进行处理,得到输出报文对象,根据业务接口中的接口输出注解,确定出用于序列化输出报文对象的接口输出报文格式规则,按照接口输出报文格式规则,将输出报文对象序列化为业务应答报文。通过基于应用程序框架针对业务接口的输入输出进行反序列化处理以及序列化处理,可以避免各业务接口各自开发,以便提高业务接口的开发效率。

Description

一种业务接口报文处理方法及装置
技术领域
本发明实施例涉及金融科技(Fintech)领域,尤其涉及一种业务接口报文处理方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。随着金融行业的不断丰富和完善,大量业务子系统上线,而不同的业务子系统可能由不同的开发人员开发,就可能使得各个业务子系统的请求报文不同,应答报文也不相同,如此,在与外部系统对接时就很不友好,而且维护各业务子系统的代码的成本也会增加,因此,如何使得各业务子系统中请求和应答报文的高效处理成为需解决的问题。
现有方案中,在每个业务子系统的接口开发过程中,业务子系统的开发人员和对接人员进行讨论协商来确定该接口的输入输出报文的格式规则,再基于该接口的输入输出报文的格式规则来完成针对该接口的开发。然而,这种处理方式一方面需要耗费较长的时间,另一方面也导致各业务子系统的接口各异,业务子系统的接口开发效率低。
综上,目前亟需一种业务接口报文处理方法,用以提高业务接口的开发效率。
发明内容
本发明实施例提供了一种业务接口报文处理方法及装置,用以提高业务接口的开发效率。
第一方面,本发明实施例提供了一种业务接口报文处理方法,包括:
接收业务请求信息;所述业务请求信息包括业务请求报文和业务接口标识;
根据所述业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化所述业务请求报文的接口输入报文格式规则;
按照所述接口输入报文格式规则,将所述业务请求报文反序列化为所述业务接口的输入报文对象;
调用所述业务接口的业务处理逻辑,对所述输入报文对象进行处理,得到输出报文对象;
根据所述业务接口中的接口输出注解,确定出用于序列化所述输出报文对象的接口输出报文格式规则;
按照所述接口输出报文格式规则,将所述输出报文对象序列化为业务应答报文。
上述技术方案中,由于现有技术方案依靠业务子系统的开发人员和对接人员的讨论协商来确定该接口的输入输出报文的格式规则,导致业务子系统的接口开发需要耗费较长时间,使得业务子系统的接口开发效率低。基于此,本发明中的技术方案引入应用程序框架,该应用程序框架针对业务接口的输入输出进行反序列化处理以及序列化处理,从而避免了各业务接口各自开发,也统一了各业务接口的处理方式,如此也可以为新业务接口的输入输出报文格式做强制性且具有可扩展性的统一规则提供支持,以确保输入输出报文格式的统一。具体来说,基于应用程序框架,根据业务接口中的接口输入注解确定出反序列化业务请求报文的接口输入报文格式规则,来完成针对业务请求报文的反序列化处理,以及根据业务接口中的接口输出注解确定出用于序列化输出报文对象的接口输出报文格式规则,来完成针对输出报文对象的序列化处理,而无需业务接口来进行业务请求报文的反序列化处理以及进行输出报文对象的序列化处理,可以降低业务子系统的业务接口的代码维护成本,并可以避免开发人员在业务接口开发的过程中因考虑业务接口的输入输出报文格式而导致业务接口的开发时间较长导致业务接口开发效率较低的问题,从而可以提高业务接口的开发效率。
可选地,在调用所述业务接口的业务处理逻辑之前,还包括:
确定所述输入报文对象的属性符合输入报文属性规则,和/或,所述输入报文对象的内容符合输入报文内容规则;
在将所述输出报文对象序列化为业务应答报文之前,还包括:
确定所述输出报文对象的属性符合输出报文属性规则,和/或,所述输出报文对象的内容符合输出报文内容规则。
上述技术方案中,在调用业务接口的业务处理逻辑之前,需要确定输入报文对象的属性是否符合输入报文属性规则,和/或,输入报文对象的内容是否符合输入报文内容规则,并在确定输入报文对象的属性符合输入报文属性规则,和/或,输入报文对象的内容符合输入报文内容规则时,才调用业务接口的业务处理逻辑,如此可以使得输入报文对象的规范性得到保证。此外,在将输出报文对象序列化为业务应答报文之前,也需要确定输出报文对象的属性是否符合输出报文属性规则,和/或,输出报文对象的内容是否符合输出报文内容规则,并在确定输出报文对象的属性符合输出报文属性规则,和/或,输出报文对象的内容符合输出报文内容规则时,才将输出报文对象序列化为业务应答报文,如此可以使得输出的业务应答报文的规范性得到保证。基于此,针对输入输出报文都设置自校验规则,可以减轻业务接口在处理业务请求报文时的复杂度,从而使得业务接口处理业务请求报文的效率提升,并可以确保输入输出报文格式的统一。
可选地,所述确定所述输入报文对象的属性符合输入报文属性规则,和/或,所述输入报文对象的内容符合输入报文内容规则,包括:
调用所述业务接口的输入报文属性校验逻辑,对所述输入报文对象进行属性校验,和/或,调用所述业务接口的输入报文内容校验逻辑,对所述输入报文对象进行内容校验,确定所述输入报文对象的属性是否符合输入报文属性规则,和/或,所述输入报文对象的内容是否符合输入报文内容规则;
所述确定所述输出报文对象的属性符合输出报文属性规则,和/或,所述输出报文对象的内容符合输出报文内容规则,包括:
调用所述业务接口的输出报文属性校验逻辑,对所述输出报文对象进行属性校验,和/或,调用所述业务接口的输出报文内容校验逻辑,对所述输出报文对象进行内容校验,确定所述输出报文对象的属性是否符合输出报文属性规则,和/或,所述输出报文对象的内容是否符合输出报文内容规则。
上述技术方案中,由于现有技术方案针对输入输出报文缺乏自校验规则,使得输入输出报文的规范性无法保证,导致业务子系统处理业务请求报文的复杂度较高。基于此,本发明中的技术方案针对输入输出报文都做了触发自校验机制,使得在调用业务接口的业务处理逻辑时,自动触发针对输入报文对象的自校验机制,即,自动对输入报文对象进行属性校验,和/或,对输入报文对象进行内容校验,如此可以规范输入报文对象的格式,以确保输入报文对象的格式统一。此外,在调用业务接口的业务处理逻辑对输入报文对象处理后,也会自动触发针对输出报文对象的自校验机制,即,自动对输出报文对象进行属性校验,和/或,对输出报文对象进行内容校验,如此可以规范输出报文对象的格式,以确保输出报文对象的格式统一。基于此,针对输入输出报文都采用触发自校验机制,可以避免异常或错误格式的输入输出报文影响业务子系统的正常运行,从而可以确保业务子系统的健壮性和安全性。
可选地,在接收业务请求信息之前,还包括:
若存在至少一个新业务接口,则为所述至少一个新业务接口均设置同一接口输入注解以及同一接口输出注解;所述接口输入注解用于指示所述至少一个新业务接口所具有的同一接口输入报文格式规则;所述接口输出注解用于指示所述至少一个新业务接口所具有的同一接口输出报文格式规则。
上述技术方案中,针对新开发的业务接口,统一各新开发的业务接口的输入输出报文格式,即,无论新开发多少个业务接口,针对这些新开发的业务接口的输入输出报文格式,都做强制性且具有可扩展性的统一规则,以确保输入输出报文格式的统一,如此该方案的输入输出报文格式规则就无需开发人员耗费较长时间与对接人员进行讨论协商,也不需要开发人员在开发新业务接口的过程中关注并考虑接口输入输出报文格式规则的问题,从而可以减轻开发人员开发业务接口的压力,并可以开发人员开发业务接口的效率。
可选地,在接收业务请求信息之前,还包括:
若存在至少一个现有业务接口,则针对每个现有业务接口,为所述现有业务接口设置对应的接口输入注解和接口输出注解;所述接口输入注解用于指示所述现有业务接口所具有的接口输入报文格式规则;所述接口输出注解用于指示所述现有接口所具有的接口输出报文格式规则。
上述技术方案中,该方案为了实现针对现有业务接口的各种各样的报文格式规则的兼容,通过使用特定的Java注解对现有业务接口的输入输出类做标注,即,针对每个现有业务接口,为该现有业务接口设置对应的接口输入注解和接口输出注解,而无需进行任何接口逻辑层面的代码改动,即可实现针对现有业务接口的各报文格式的兼容性。
可选地,在得到输出报文对象之前,还包括:
若确定处理所述输入报文对象的过程中出现异常,则根据异常类型确定是否进行主备数据库的切换;
若是,则基于主数据库或备用数据库重新执行所述业务接口的业务处理逻辑。
上述技术方案中,若在处理输入报文对象的处理过程中出现异常,则应用程序框架根据异常类型在确定需要进行主备数据库的切换时,自动将业务接口的业务处理逻辑在主数据库或备用数据库上重新完整执行一次,如此可以避免因异常给业务子系统带来不好的影响,以及可以确保输出报文对象的准确性,并可以确保业务子系统的正常运行。
可选地,在得到输出报文对象之前,还包括:
若确定处理所述输入报文对象的过程中存在远程调用,则按照远程调用接口的输入报文属性校验逻辑以及输入报文内容校验逻辑,对远程调用请求报文进行校验,并在确定远程调用请求报文的属性符合所述远程调用接口的输入报文属性规则且所述远程调用请求报文的内容符合所述远程调用接口的输入报文内容规则时,发起远程调用请求。
上述技术方案中,该方案将在调用业务接口的业务处理逻辑处理输入报文对象的过程中所涉及的远程调用其它接口的远程调用逻辑放在了应用程序框架内,而业务层(即业务接口)只需要定义远程调用接口的输入输出报文对象,以及定义远程调用其它接口的元数据信息即可,无需再实现远程调用逻辑。如此,可以使得各业务接口的远程调用请求都在应用程序框架层做统一处理,而无需各业务接口独自对远程调用请求进行处理,从而可以缓解业务接口的数据处理压力,以提高业务接口处理业务请求报文的效率,并可以减少开发人员在开发业务接口的过程中针对远程调用逻辑所耗费的时间。
第二方面,本发明实施例还提供了一种业务接口报文处理装置,包括:
接收单元,用于接收业务请求信息;所述业务请求信息包括业务请求报文和业务接口标识;
处理单元,用于根据所述业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化所述业务请求报文的接口输入报文格式规则;按照所述接口输入报文格式规则,将所述业务请求报文反序列化为所述业务接口的输入报文对象;调用所述业务接口的业务处理逻辑,对所述输入报文对象进行处理,得到输出报文对象;根据所述业务接口中的接口输出注解,确定出用于序列化所述输出报文对象的接口输出报文格式规则;按照所述接口输出报文格式规则,将所述输出报文对象序列化为业务应答报文。
可选地,所述处理单元还用于:
在调用所述业务接口的业务处理逻辑之前,确定所述输入报文对象的属性符合输入报文属性规则,和/或,所述输入报文对象的内容符合输入报文内容规则;
所述处理单元还用于:
在将所述输出报文对象序列化为业务应答报文之前,确定所述输出报文对象的属性符合输出报文属性规则,和/或,所述输出报文对象的内容符合输出报文内容规则。
可选地,所述处理单元具体用于:
调用所述业务接口的输入报文属性校验逻辑,对所述输入报文对象进行属性校验,和/或,调用所述业务接口的输入报文内容校验逻辑,对所述输入报文对象进行内容校验,确定所述输入报文对象的属性是否符合输入报文属性规则,和/或,所述输入报文对象的内容是否符合输入报文内容规则;
所述处理单元具体用于:
调用所述业务接口的输出报文属性校验逻辑,对所述输出报文对象进行属性校验,和/或,调用所述业务接口的输出报文内容校验逻辑,对所述输出报文对象进行内容校验,确定所述输出报文对象的属性是否符合输出报文属性规则,和/或,所述输出报文对象的内容是否符合输出报文内容规则。
可选地,所述处理单元还用于:
在接收业务请求信息之前,若存在至少一个新业务接口,则为所述至少一个新业务接口均设置同一接口输入注解以及同一接口输出注解;所述接口输入注解用于指示所述至少一个新业务接口所具有的同一接口输入报文格式规则;所述接口输出注解用于指示所述至少一个新业务接口所具有的同一接口输出报文格式规则。
可选地,所述处理单元还用于:
在接收业务请求信息之前,若存在至少一个现有业务接口,则针对每个现有业务接口,为所述现有业务接口设置对应的接口输入注解和接口输出注解;所述接口输入注解用于指示所述现有业务接口所具有的接口输入报文格式规则;所述接口输出注解用于指示所述现有接口所具有的接口输出报文格式规则。
可选地,所述处理单元还用于:
在得到输出报文对象之前,若确定处理所述输入报文对象的过程中出现异常,则根据异常类型确定是否进行主备数据库的切换;
若是,则基于主数据库或备用数据库重新执行所述业务接口的业务处理逻辑。
可选地,所述处理单元还用于:
在得到输出报文对象之前,若确定处理所述输入报文对象的过程中存在远程调用,则按照远程调用接口的输入报文属性校验逻辑以及输入报文内容校验逻辑,对远程调用请求报文进行校验,并在确定远程调用请求报文的属性符合所述远程调用接口的输入报文属性规则且所述远程调用请求报文的内容符合所述远程调用接口的输入报文内容规则时,发起远程调用请求。
第三方面,本发明实施例提供一种计算设备,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述第一方面任意所述的业务接口报文处理方法。
第四方面,本发明实施例提供一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述第一方面任意所述的业务接口报文处理方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种业务接口报文处理方法的流程示意图;
图2为本发明实施例提供的一种现存接口和新接口以及远程调用接口的输入报文继承关系示意图;
图3为本发明实施例提供的一种现存接口和新接口以及远程调用接口的输出报文继承关系示意图;
图4为本发明实施例提供的另一种业务接口报文处理方法的流程示意图;
图5为本发明实施例提供的一种业务接口报文处理装置的结构示意图;
图6为本发明实施例提供的一种计算设备的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
下面首先对本发明实施例中涉及的部分用语进行解释说明,以便于本领域技术人员进行理解。
(1)Spring:一种开源的、基于Java程序语言的应用程序框架。它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
(2)AOP(Aspect Oriented Programming,面向切面编程):通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,可以用于定义拦截器。
如上介绍了本发明实施例中涉及的部分用语,下面对本发明实施例涉及的技术特征进行介绍。
图1示例性的示出了本发明实施例提供的一种业务接口报文处理方法的流程,该流程可以由业务接口报文处理装置执行。
如图1所示,该流程具体包括:
步骤101,接收业务请求信息;所述业务请求信息包括业务请求报文和业务接口标识。
步骤102,根据所述业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化所述业务请求报文的接口输入报文格式规则。
步骤103,按照所述接口输入报文格式规则,将所述业务请求报文反序列化为所述业务接口的输入报文对象。
步骤104,调用所述业务接口的业务处理逻辑,对所述输入报文对象进行处理,得到输出报文对象。
步骤105,根据所述业务接口中的接口输出注解,确定出用于序列化所述输出报文对象的接口输出报文格式规则。
步骤106,按照所述接口输出报文格式规则,将所述输出报文对象序列化为业务应答报文。
上述步骤101中,本发明中的技术方案引入应用程序框架(也可以称为应用程序框架层),该应用程序框架针对业务接口的输入输出进行反序列化处理以及序列化处理,而无需业务子系统的接口来针对业务接口的输入输出进行反序列化处理以及序列化处理,从而可以减轻业务子系统的业务接口的数据处理压力,并可以减少开发人员在开发新业务接口时因考虑接口输入输出报文格式所耗费的时间,以便提高开发人员的开发效率。其中,一般有多个业务子系统共用一个应用程序框架,比如业务子系统A、业务子系统B等共用一个应用程序框架。由于在某一外部系统发送业务请求信息之前,已经协商好该外部系统的某一类型业务请求信息是发送给哪个业务子系统的哪个业务接口的,因此该应用程序框架层在接收到某一外部系统发送的业务请求信息时是知道该业务请求信息是发送给哪个业务子系统的哪个业务接口的。其中,该业务请求信息可以包括业务请求报文和业务接口标识。示例性地,以业务子系统A为例进行描述,假设业务子系统A有两个业务接口,即业务接口A1、业务接口A2。比如,某一外部系统发送业务请求信息给业务子系统A的业务接口A1,则应用程序框架层在接收到该业务请求信息时是知道该业务请求信息给业务子系统A的业务接口A1的。或者,某一外部系统发送业务请求信息给业务子系统A的业务接口A2,则应用程序框架层在接收到该业务请求信息时是知道该业务请求信息给业务子系统A的业务接口A2的。
此外,在应用程序框架接收业务请求信息之前,需要针对现有业务接口以及新开发的接口进行定义各自的输入输出报文格式规则。具体地,若存在至少一个新业务接口,则为至少一个新业务接口均设置同一接口输入注解以及同一接口输出注解。其中,该接口输入注解用于指示至少一个新业务接口所具有的同一接口输入报文格式规则;接口输出注解用于指示至少一个新业务接口所具有的同一接口输出报文格式规则。如此,针对新开发的业务接口,统一各新开发的业务接口的输入输出报文格式,即,无论新开发多少个业务接口,针对这些新开发的业务接口的输入输出报文格式,都做强制性且具有可扩展性的统一规则,以确保输入输出报文格式的统一,如此该方案的输入输出报文格式规则就无需开发人员耗费较长时间与对接人员进行讨论协商,也不需要开发人员在开发新业务接口的过程中关注并考虑接口输入输出报文格式规则的问题,从而可以减轻开发人员开发业务接口的压力,并可以开发人员开发业务接口的效率。
示例性地,继续以业务子系统A为例进行描述,假设业务子系统A为现有业务子系统,业务子系统A有三个业务接口,即业务接口A1、业务接口A2和业务接口A3,且业务接口A1为现有业务接口,业务接口A2和业务接口A3为新业务接口,则针对业务接口A2和业务接口A3均设置同一接口输入注解以及同一接口输出注解(即均设置同一接口输入报文格式规则以及同一接口输出报文格式规则)。比如,设置业务接口A2和业务接口A3的输入格式都为蛇形下划线大写格式,或者,设置业务接口A2和业务接口A3的输出格式都为蛇形下划线小写格式。
若存在至少一个现有业务接口,则针对每个现有业务接口,为现有业务接口设置对应的接口输入注解和接口输出注解。其中,该接口输入注解用于指示现有业务接口所具有的接口输入报文格式规则;该接口输出注解用于指示现有接口所具有的接口输出报文格式规则。如此,该方案为了实现针对现有业务接口的各种各样的报文格式规则的兼容,通过使用特定的Java注解对现有业务接口的输入输出类做标注,即,针对每个现有业务接口,为该现有业务接口设置对应的接口输入注解和接口输出注解,而无需进行任何接口逻辑层面的代码改动,即可实现针对现有业务接口的各报文格式的兼容性。
示例性地,继续以业务子系统A为例进行描述,假设业务子系统A为现有业务子系统,业务子系统A有三个业务接口,即业务接口A1、业务接口A2和业务接口A3,且业务接口A1和业务接口A2为现有业务接口,业务接口A3为新业务接口,则针对业务接口A1设置对应的接口输入注解以及接口输出注解(即业务接口A1具有对应的某一种接口输入报文格式规则以及某一种接口输出报文格式规则);针对业务接口A2设置对应的接口输入注解以及接口输出注解(即业务接口A1具有对应的另一种接口输入报文格式规则以及另一种接口输出报文格式规则)。比如,业务接口A1所具有的输入格式为驼峰格式,业务接口A2所具有的输入格式为蛇形下划线格式,或者,业务接口A1所具有的输出格式为驼峰格式,业务接口A2所具有的输出格式为蛇形下划线格式。
上述步骤102和步骤103中,应用程序框架根据业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化业务请求报文的接口输入报文格式规则,并按照接口输入报文格式规则,将业务请求报文反序列化为业务接口的输入报文对象。示例性地,假设业务子系统A为现存的业务子系统,并假设业务子系统A有两个业务接口,即业务接口A1和业务接口A2,该业务接口A1和业务接口A2均为现有业务接口。以业务接口A1为例进行描述,假设某一外部系统发送业务请求信息给业务子系统A的业务接口A1,应用程序框架从业务接口A1中的接口输入注解(比如Wrapper4HandlerInputDTO_V1)识别出该业务接口A1所具有的输入报文格式规则(比如HandlerIntputDTOWrapper_V1_CamelOnly),则基于该输入报文格式规则HandlerIntputDTOWrapper_V1_CamelOnly,可将业务请求报文反序列化为驼峰格式的输入报文对象。或者,假设业务子系统B为新业务子系统,并假设业务子系统B有两个业务接口,即业务接口B1和业务接口B2,该业务接口B1和业务接口B2均为新业务接口。以业务接口B1为例进行描述,假设某一外部系统发送业务请求信息给业务子系统B的业务接口B1,应用程序框架从业务接口B1中的接口输入注解(比如Wrapper4HandlerInputDTO_V2)识别出该业务接口B1所具有的输入报文格式规则(比如蛇形下划线大写格式),则基于蛇形下划线大写格式的规则,可将业务请求报文反序列化为蛇形下划线大写格式的输入报文对象。
上述步骤104中,应用程序框架在调用业务接口的业务处理逻辑之前,需要确定输入报文对象的属性是否符合输入报文属性规则,和/或,输入报文对象的内容是否符合输入报文内容规则,并在确定输入报文对象的属性符合输入报文属性规则,和/或,输入报文对象的内容符合输入报文内容规则时,才调用业务接口的业务处理逻辑,如此可以使得输入报文对象的规范性得到保证。此外,在将输出报文对象序列化为业务应答报文之前,也需要确定输出报文对象的属性是否符合输出报文属性规则,和/或,输出报文对象的内容是否符合输出报文内容规则,并在确定输出报文对象的属性符合输出报文属性规则,和/或,输出报文对象的内容符合输出报文内容规则时,才将输出报文对象序列化为业务应答报文,如此可以使得输出的业务应答报文的规范性得到保证。基于此,针对输入输出报文都设置自校验规则,可以减轻业务接口在处理业务请求报文时的复杂度,从而使得业务接口处理业务请求报文的效率提升,并可以确保输入输出报文格式的统一。
具体地,在对业务接口的输入输出进行校验时,调用业务接口的输入报文属性校验逻辑,对输入报文对象进行属性校验,和/或,调用业务接口的输入报文内容校验逻辑,对输入报文对象进行内容校验,确定输入报文对象的属性是否符合输入报文属性规则,和/或,输入报文对象的内容是否符合输入报文内容规则。以及调用业务接口的输出报文属性校验逻辑,对输出报文对象进行属性校验,和/或,调用业务接口的输出报文内容校验逻辑,对输出报文对象进行内容校验,确定输出报文对象的属性是否符合输出报文属性规则,和/或,输出报文对象的内容是否符合输出报文内容规则。如此,由于现有技术方案针对输入输出报文缺乏自校验规则,使得输入输出报文的规范性无法保证,导致业务子系统处理业务请求报文的复杂度较高。基于此,本发明中的技术方案针对输入输出报文都做了触发自校验机制,使得在调用业务接口的业务处理逻辑时,自动触发针对输入报文对象的自校验机制,即,自动对输入报文对象进行属性校验,和/或,对输入报文对象进行内容校验,如此可以规范输入报文对象的格式,以确保输入报文对象的格式统一。此外,在调用业务接口的业务处理逻辑对输入报文对象处理后,也会自动触发针对输出报文对象的自校验机制,即,自动对输出报文对象进行属性校验,和/或,对输出报文对象进行内容校验,如此可以规范输出报文对象的格式,以确保输出报文对象的格式统一。基于此,针对输入输出报文都采用触发自校验机制,可以避免异常或错误格式的输入输出报文影响业务子系统的正常运行,从而可以确保业务子系统的健壮性和安全性。
在针对输入报文对象校验成功后,即可调用业务接口的业务处理逻辑,对输入报文对象进行处理,得到输出报文对象。示例性地,应用程序框架调用业务接口中的业务处理方法handle()对校验成功的输入报文对象进行处理,得到处理结果(即输出报文对象)。此外,在得到输出报文对象之前,若确定处理输入报文对象的过程中出现异常,则根据异常类型确定是否进行主备数据库的切换;若是,则基于主数据库或备用数据库重新执行业务接口的业务处理逻辑。基于此,若在处理输入报文对象的处理过程中出现异常,则应用程序框架根据异常类型在确定需要进行主备数据库的切换时,自动将业务接口的业务处理逻辑在主数据库或备用数据库上重新完整执行一次,如此可以避免因异常给业务子系统带来不好的影响,以及可以确保输出报文对象的准确性,并可以确保业务子系统的正常运行。示例性地,如果在执行业务处理方法handler()的过程中产生异常,则需要按照产生的异常进行分类,比如业务异常或技术异常。如果为业务异常,则将该业务异常直接抛出。如果为技术异常,则针对该技术异常会根据接口错误码自动检测是否需要重新在主数据库或备用数据库上执行整个业务接口的业务处理逻辑。如果是,则在主数据库或备用数据库上重新执行整个业务接口的业务处理逻辑;如果否,则直接抛出异常。
而且,在得到输出报文对象之前,若确定处理输入报文对象的过程中存在远程调用,则自动触发远程调用接口拦截器,该远程调用接口拦截器按照远程调用接口的输入报文属性校验逻辑以及输入报文内容校验逻辑,对远程调用请求报文进行校验,并在确定远程调用请求报文的属性符合远程调用接口的输入报文属性规则且远程调用请求报文的内容符合远程调用接口的输入报文内容规则时,发起远程调用请求。基于此,该方案将在调用业务接口的业务处理逻辑处理输入报文对象的过程中所涉及的远程调用其它接口的远程调用逻辑放在了应用程序框架内,而业务层(即业务接口)只需要定义远程调用接口的输入输出报文对象,以及定义远程调用其它接口的元数据信息即可,无需再实现远程调用逻辑。如此,可以使得各业务接口的远程调用请求都在应用程序框架层做统一处理,而无需各业务接口独自对远程调用请求进行处理,从而可以缓解业务接口的数据处理压力,以提高业务接口处理业务请求报文的效率,并可以减少开发人员在开发业务接口的过程中针对远程调用逻辑所耗费的时间。
上述步骤105和步骤106中,应用程序框架根据业务接口中的接口输出注解,确定出用于序列化输出报文对象的接口输出报文格式规则,并按照接口输出报文格式规则,将输出报文对象序列化为业务应答报文。示例性地,假设业务子系统A为现存的业务子系统,并假设业务子系统A有两个业务接口,即业务接口A1和业务接口A2,该业务接口A1和业务接口A2均为现有业务接口。以业务接口A1为例进行描述,应用程序框架从业务接口A1中的接口输出注解(比如Wrapper4PayloadOutput_V1)识别出该业务接口A1所具有的输出报文格式规则(比如PayloadOutputWrapper_V1_CamelOnly),则基于该输出报文格式规则PayloadOutputWrapper_V1_CamelOnly,可将输出报文对象序列化为驼峰格式的业务应答报文。或者,假设业务子系统B为新业务子系统,并假设业务子系统B有两个业务接口,即业务接口B1和业务接口B2,该业务接口B1和业务接口B2均为新业务接口。以业务接口B1为例进行描述,应用程序框架从业务接口B1中的接口输出注解(比如Wrapper4PayloadOutput_V2)识别出该业务接口B1所具有的输出报文格式规则(比如蛇形下划线小写格式),则基于蛇形下划线小写格式的规则,可将输出报文对象序列化为蛇形下划线小写格式的业务应答报文。
有鉴于此,下面对本发明实施例中业务接口报文处理方法的实施过程进行具体描述。
Step1:应用程序框架层定义带校验机制的DTO(Data Transfer Object,数据传输对象)。
具体地,应用程序框架层(比如Spring开源框架)定义输入报文抽象类ValidatableDTO和输出报文抽象类SelfValidatableDTO的包装器子类,提供统一的接口输入输出报文属性校验方法validate()以及输入输出报文内容值校验方法validateExt()。业务层可以无需关注包装器子类的定义,按需继承对应的输入输出类即可,也可以按需实现输入输出报文业务层级的内容校验规则。此外,应用程序框架层面向业务接口,会自动调用实现类的相关方法,而业务层只需定义输入输出报文内容的校验规则,不需关心实现类的相关方法是如何调用的。
其中,参考图2,图2为本发明实施例提供的一种现存接口和新接口以及远程调用接口的输入报文继承关系示意图。基于图2,对于现有业务接口、新业务接口以及远程调用业务接口的输入报文均继承自ValidatableDTO,在输入报文抽象类ValidatableDTO中定义输入报文属性校验方法validate()以及输入报文内容值校验方法validateExt(),作为可选校验,输入实现类可以自定义实现内容值的输入报文校验规则,达到对业务接口入参做校验的目的。参考图3,图3为本发明实施例提供的一种现存接口和新接口以及远程调用接口的输出报文继承关系示意图。基于图3,对于现存业务接口、新业务接口以及远程调用业务接口的输出报文均继承自SelfValidatableDTO,在SelfValidatableDTO抽象类中定义了输出报文属性校验方法validate()以及输出报文内容值校验方法validateExt(),作为可选校验,输出实现类可以自定义实现内容值的输出报文校验规则,以达到各自业务接口在返回输出报文之前,对报文内容做校验的目的。
Step2:应用程序框架层定义兼容现有业务接口的输入输出报文的包装器。
具体地,应用程序框架层定义了兼容各种报文格式的输入报文包装器HandlerIntputDTOWrapper_V1以及该输入报文包装器对应的具体实现类,并定义了输出报文包装器PayloadOutputWrapper_V1以及该输出报文包装器对应的具体实现类。再按照JsonDTOUtil封装各包装器各自所需的序列化和反序列化方法wrap(),兼容现有格式比如小写蛇形、驼峰等格式各异的输入输出报文。其中,业务层为了兼容现有业务接口的特殊json格式的报文,只需在输入输出实现类的DTO上使用java注解,将对应的wrapper注入即可,无需关心具体是如何序列化和反序列化的。
其中,在定义针对现有业务接口的java注解时,可以定义Wrapper4HandlerInputDTO_V1注解和Wrapper4PayloadOutput_V1注解。其中,Wrapper4HandlerInputDTO_V1注解包含属性HandlerIntputDTOWrapper_V1,该属性HandlerIntputDTOWrapper_V1可以包含多种接口输入报文格式规则;Wrapper4PayloadOutput_V1注解包含属性PayloadOutputWrapper_V1,该属性PayloadOutputWrapper_V1可以包含多种接口输出报文格式规则。也就是说,各现有业务接口所对应的具体实现类的wrap()方法可能是不相同的,每个现有业务接口都可能对应一种具体实现类的wrap()方法。上述java注解用于应用程序框架层在调用现有业务接口的业务处理逻辑前后,对使用了以上注解的输入输出DTO做统一处理。而且,应用程序框架层面向现有业务接口,实际调用时会自动调用现有业务接口对应的输入输出实现类相关的Wrapper,达到针对现有业务接口的不同格式的json接口报文也做到统一处理的效果,以便实现应用程序框架层针对现有业务接口的不同报文格式的兼容性。
此外,为了实现对现有业务接口的报文进行兼容,现有业务接口中包含对应的wrap()方法,对于不同的业务接口报文,定义对应的实现类,然后根据特定的需要实现不同的wrap()方法,增加不同的报文头,以及各自不同接口报文格式的序列化方式。采用Gson封装了一套序列化工具,针对各种json报文格式(比如驼峰格式、下划线格式、特定报文头加驼峰正文格式、特定报文头加下划线正文格式等)进行序列化和反序列化。
进一步地,对于输入json报文,分别定义针对现有业务接口的各报文格式的输入报文包装器HandlerIntputDTOWrapper_V1的实现类。其中,定义的输入报文包装器的实现类的形式可以如表1所示。
表1
Figure BDA0003081876440000181
对于输出json报文,分别定义针对现有业务接口的各报文格式的输出报文包装器PayloadOutputWrapper_V1的实现类。其中,定义的输出报文包装器的实现类的形式可以如表2所示。
表2
Figure BDA0003081876440000182
针对表1,ClassName主键字段值表示对应的输入报文包装器HandlerIntputDTOWrapper_V1的实现类,针对表2,ClassName主键字段值表示对应的输出包装器PayloadOutputWrapper_V1的实现类。每个类实现特定的wrap()方法,使用Gson序列化工具实现特定的反序列化和序列化处理方式,即,将针对现有业务接口的请求报文反序列化成该现有业务接口的入参对象,以及将针对该入参对象进行处理后的业务输出结果序列化为对应的json格式。如此,通过定义不同的实现类就可以实现将各种格式的输入报文转换为现有业务接口的输入报文对象InputDTO,以及将不同的业务输出结果转换为特定格式的json字符串。
示例性地,针对现有业务接口的输入报文,可以自定义输入报文反序列化格式(比如忽略大小写)。即,将针对现有业务接口的请求报文反序列化成忽略大小写的入参对象的执行脚本可以为:
Figure BDA0003081876440000191
其中,上述脚本中的“JsonDTOUtil.json2DTONoNaming”用于指示在将针对现有业务接口的请求报文反序列化成该现有业务接口的入参对象后所得到的入参对象是忽略大小写的。
针对现有业务接口的输出报文,可以自定义输出报文序列化格式(比如忽略null字段、忽略大小写)。即,将业务输出结果序列化为忽略null字段、忽略大小写的json字符串的执行脚本可以为:
Figure BDA0003081876440000192
其中,上述脚本中的“JsonDTOUtil.dto2JsonNoNamingOmitNullValue”用于指示在将业务输出结果转换为特定格式的json字符串时所得到的json字符串是忽略null字段、忽略大小写的。
Step3:应用程序框架层定义新业务接口的输入输出报文格式。
具体地,应用程序框架层在定义新业务接口的输入输出报文格式时,会设置一套统一的报文格式规范,用于对新业务接口的报文格式做强制性且具有可扩展性的统一格式规则,以便确保新业务接口的输入输出报文格式的统一。也就是说,后续不论需要开发一个、两个或两个以上新业务接口,都需要采用该统一的输入输出报文格式规则,比如包含统一的输入输出报文头字段,即,REQ_HEADER字段和RESP_HEADER字段,报文正文格式采用统一的大写蛇形下划线格式或者可以采用统一的驼峰格式,以及包含各种接口相关的元数据信息等。其中,该元数据信息可以包含接口耗时、API报文版本、IP、子系统ID、报文接收时间和报文返回时间等。此外,在定义新业务接口的输入输出报文格式时,也可以在输入输出实现类的DTO上使用java注解,将对应的wrapper注入。具体地,在定义针对新业务接口的java注解时,可以定义Wrapper4HandlerInputDTO_V2注解和Wrapper4PayloadOutput_V2注解。其中,Wrapper4HandlerInputDTO_V2注解包含属性HandlerIntputDTOWrapper_V2,该属性HandlerIntputDTOWrapper_V2对应同一种接口输入报文格式规则;Wrapper4PayloadOutput_V2注解包含属性PayloadOutputWrapper_V2,该属性PayloadOutputWrapper_V2对应同一种接口输出报文格式规则。也就是说,各新业务接口所对应的具体实现类的wrap()方法是相同的,每个新业务接口都对应同一种具体实现类的wrap()方法。上述java注解用于应用程序框架层在调用现有业务接口的业务处理逻辑前后,对使用了以上注解的输入输出DTO做统一处理。
示例性地,针对新业务接口,可以定义输入反序列化类HandlerIntputDTOWrapper_V2。其中,该输入反序列化类的执行脚本可以为:
Figure BDA0003081876440000211
针对新业务接口,可以定义输出序列化类PayloadOutputWrapper_V2。其中,该输出序列化类的执行脚本可以为:
Figure BDA0003081876440000212
Step4:应用程序框架层接收业务请求报文并对该业务请求报文进行处理。
下面结合图4,对本发明实施例中应用程序框架层接收业务请求报文并对该业务请求报文进行处理的实施过程进行具体描述。其中,图4为本发明实施例提供的另一种业务接口报文处理方法的流程示意图。
步骤A、应用程序框架层接收业务请求报文并对该业务请求报文进行反序列化处理。
本发明实施例基于应用程序框架层来统一对发给各业务子系统的业务请求报文进行反序列化和序列化处理,而无需业务子系统的接口来进行业务请求报文的反序列化处理和序列化处理,从而可以减轻业务子系统的业务接口的数据处理压力,并可以减少开发人员在开发新业务接口时因考虑接口输入输出报文格式所耗费的时间。其中,一般有两个或两个以上业务子系统共用一个应用程序框架,比如业务子系统A、业务子系统B、业务子系统C等共用一个应用程序框架。其中,每个业务子系统可以包含至少一个业务接口。也就是说,在外部系统将某一业务请求报文发送给应用程序框架中的某一业务子系统的业务接口(比如业务子系统A的某一业务接口)时,该应用程序框架层会在接收到该业务请求报文时,会对该业务请求报文进行反序列化处理。需要说明的是,外部系统在发送某一业务请求报文时,是指定好该业务请求报文是发送给哪一个业务子系统的哪一个业务接口的,也即是说,应用程序框架层在接收到某一业务请求报文时是知道该业务请求报文是发送给哪个业务子系统的哪个业务接口的。即,应用程序框架层在接收到该业务请求报文后,会打印日志,并将报文、报文头信息缓存到上下文对象Context中。再根据入参报文头信息,将输入参数经过各个handler的输入DTO上的输入Java注解Wrapper4HandlerInputDTO_V?,识别到对应的注解属性类型(比如HandlerIntputDTOWrapper_V1或HandlerIntputDTOWrapper_V2)。然后,根据识别出的注解属性类型调用对应的具体实现类的wrap()方法对业务请求报文进行反序列化处理,得到业务子系统A的某一业务接口的InputDTO。
示例性地,假设业务接口中的输入Java注解为Wrapper4HandlerInputDTO_V1,则可以识别出的注解属性类型为HandlerIntputDTOWrapper_V1,则根据HandlerIntputDTOWrapper_V1调用对应的具体实现类的wrap()方法对业务请求报文进行反序列化处理,比如业务子系统A的某一业务接口的接口输入报文格式规则为规定业务子系统A的某一业务接口的InputDTO的格式为蛇形下划线大写,即可将业务请求报文反序列化为蛇形下划线大写的InputDTO。例如,假设业务子系统A为现存的业务子系统,并假设业务子系统A有三个业务接口,即业务接口A1、业务接口A2和业务接口A3,该业务接口A1、业务接口A2和业务接口A3均为现有业务接口。以业务接口A1为例进行描述,某一外部系统发送某一类型的业务请求报文给业务子系统A,且根据发送业务请求报文之前双方的协商指定好该外部系统发送该类型的业务请求报文给业务子系统A的业务接口A1。假设业务接口A1对应的输入Java注解为Wrapper4HandlerInputDTO_V1,则应用程序框架层可以识别出的注解属性类型为HandlerIntputDTOWrapper_V1,则根据HandlerIntputDTOWrapper_V1调用对应的具体实现类的wrap()方法对业务请求报文进行反序列化处理,比如业务接口A1的接口输入报文格式规则为规定业务接口A1的InputDTO的格式为驼峰格式,即可将业务请求报文反序列化为驼峰格式的InputDTO。
或者,假设业务子系统B为新开发的业务子系统,并假设业务子系统B有三个业务接口,即,业务接口B1、业务接口B2、业务接口B3,该业务接口B1、业务接口B2和业务接口B3均新业务接口。以业务接口B1为例进行描述,某一外部系统发送某一类型的业务请求报文给业务子系统B,且根据发送业务请求报文之前双方的协商指定好该外部系统发送该类型的业务请求报文给业务子系统B的业务接口B1。假设业务接口B1对应的输入Java注解为Wrapper4HandlerInputDTO_V2,则应用程序框架层可以识别出的注解属性类型为HandlerIntputDTOWrapper_V2,则根据HandlerIntputDTOWrapper_V2调用对应的具体实现类的wrap()方法对业务请求报文进行反序列化处理,比如业务接口B1的接口输入报文格式规则为规定业务接口B1的InputDTO的格式为蛇形下划线大写格式,即可将业务请求报文反序列化为蛇形下划线大写格式的InputDTO。
步骤B、应用程序框架层调用业务请求报文对应的业务接口的业务处理逻辑对反序列化后的业务请求报文进行处理。
具体地,应用程序框架层在调用业务请求报文对应的业务接口中的业务处理方法handle()时,应用程序框架层中的拦截器(比如AOP拦截器或其它任何可以支持AOP功能的工具等)会拦截所有业务接口的业务逻辑处理入口,自动对业务处理逻辑做增强处理。其中,AOP拦截器是使用Spring的AOP实现的拦截器。也即是说,以AOP拦截器(即QsHandlerInterceptor)为例,AOP拦截器会自动执行下述过程,即(1)对输入报文对象(反序列化后的业务请求报文)做属性校验,以及输入报文对象的内容值做内容校验;(2)调用业务处理方法handle();(3)对输出报文对象做属性校验,以及输出报文对象的内容值做内容校验。其中,AOP拦截器自动执行针对输入报文对象的处理过程具体为:
a、由于业务接口的IntputDTO都继承自抽象类HandlerIntputDTO,因此调用抽象类HandlerIntputDTO中针对输入报文对象(反序列化后的业务请求报文)的属性校验方法validate()对输入报文对象进行属性校验,以及调用抽象类HandlerIntputDTO中针对输入报文对象的内容校验方法validateExt()对输入报文对象的内容值进行内容校验。此外,业务层代码输入InputDTO只需继承HandlerInputDTO,并选择性的实现输入报文对象的内容值校验规则的内容校验方法validateExt()。如果不关注输入报文对象的属性或内容值是否正确,默认对应的方法为空即可。
b、调用对应的业务处理方法handle()对校验成功的输入报文对象进行处理,获取返回值对象(即输出报文对象),并判断返回值对象是否为空,如果为空则直接返回,如果不为空则执行步骤c。
c、由于业务接口的OutputDTO都继承自抽象类HandlerOutputDTO,因此调用抽象类HandlerOutputDTO中针对输出报文对象的属性校验方法validate()对输出报文对象进行属性校验,以及调用抽象类HandlerOutputDTO中针对输出报文对象的内容校验方法validateExt()对输出报文对象的内容值进行内容校验。此外,业务层代码输出OutputDTO只需选择性的实现输出报文对象的内容值校验规则的内容校验方法validateExt()。如果不关注输出报文对象的属性或内容值是否正确,默认对应的方法为空即可。
d、返回业务处理方法handle()的处理结果(即输出报文对象)。
示例性地,以代码实现为例,AOP拦截器自动执行针对输入报文对象的处理过程的脚本为:
Figure BDA0003081876440000241
Figure BDA0003081876440000251
步骤C、如果步骤B中执行业务处理方法handler()的过程中产生异常,则需要按照产生的异常进行分类。如果产生的异常属于业务异常,则将该业务异常直接抛出。如果产生的异常属于技术异常,则针对该技术异常会根据接口错误码自动检测是否需要重新在备用数据库上执行整个业务接口的业务处理逻辑。如果是,则在备用数据库上重新执行整个业务接口的业务处理逻辑;如果否,则直接抛出异常。其中,通过实际生产经验,归纳出需要切换备用数据库重新执行整个接口的特定错误枚举如下:
(1)、HBaseSwitched("00000201","[%s]的HBase发生主备数据库切换")。
(2)、HBasexxxStandbyOnFailure("00000202","到备用数据库重新执行一次业务处理方法handler()")。
其中,业务层在使用工具类获取集群数据时,会将访问集群的统计数据落地,应用程序框架层会自动感知到集群是否发生主备数据库切换,以便确定是否需要在备用数据库重新执行整个业务接口的业务处理逻辑,业务层无感知。
需要说明的是,若业务接口的业务处理逻辑一开始是在备用数据库上执行的,则如果执行业务处理方法handler()的过程中产生异常,且确定产生的异常属于技术异常,则针对该技术异常会根据接口错误码自动检测是否需要重新在主数据库上执行整个业务接口的业务处理逻辑。如果是,则在主数据库上重新执行整个业务接口的业务处理逻辑;如果否,则直接抛出异常。
步骤D、应用程序框架层对校验成功的输出报文对象进行序列化处理。
具体地,应用程序框架层根据业务接口的输出报文对象所对应的输出Java注解Wrapper4PayloadOutput_V?,识别到对应的注解属性类型(比如PayloadOutputWrapper_V1或PayloadOutputWrapper_V2)。然后,根据识别出的注解属性类型调用对应的具体实现类的wrap()方法对输出报文对象进行序列化处理。即,将业务处理方法handle()的处理结果序列化为对应格式的结果报文,并将该结果报文缓存到上下文对象Context中。示例性地,假设输出Java注解为Wrapper4PayloadOutput_V1,则可以识别出的注解属性类型为PayloadOutputWrapper_V1,则根据PayloadOutputWrapper_V1调用对应的具体实现类的wrap()方法对输出报文对象报文进行序列化处理,比如业务子系统A的某一业务接口的接口输出报文格式规则为规定业务子系统A的某一业务接口的OutputDTO的格式为蛇形下划线小写格式,即可将输出报文对象序列化为蛇形下划线小写的OutputDTO。然后,基于结果报文构造业务接口的返回报文(即针对业务请求报文的业务应答报文),并进行日志打印。
例如,继续以业务子系统A的业务接口A1为例进行描述,假设业务接口A1对应的输出Java注解为Wrapper4PayloadOutput_V1,则应用程序框架层可以识别出的注解属性类型为PayloadOutputWrapper_V1,则根据PayloadOutputWrapper_V1调用对应的具体实现类的wrap()方法对输出报文对象进行序列化处理,比如业务接口A1的接口输出报文格式规则为规定业务接口A1的OutputDTO的格式为蛇形下划线小写格式,即可将输出报文对象序列化为蛇形下划线小写的OutputDTO。需要说明的是,各现有业务接口所对应的具体实现类的wrap()方法可能是不相同的,需要具体确定每个现有业务接口所对应的具体实现类的wrap()方法是哪一个。
或者,继续以业务子系统B的业务接口B1为例进行描述,假设业务接口B1对应的输出Java注解为Wrapper4PayloadOutput_V2,则应用程序框架层可以识别出的注解属性类型为PayloadOutputWrapper_V2,则根据PayloadOutputWrapper_V2调用对应的具体实现类的wrap()方法对输出报文对象进行序列化处理,比如业务接口B1的接口输出报文格式规则为规定业务接口B1的OutputDTO的格式为蛇形下划线大写格式,即可将输出报文对象序列化为蛇形下划线大写格式的OutputDTO。需要说明的是,新业务接口的注解属性类型对应同一种具体实现类的wrap()方法。
步骤E、如果步骤B中执行业务处理方法handler()的过程中涉及远程调用,会触发远程调用接口拦截器QsRemoteHandlerInterceptor,自动对远程调用的输入报文校验以及发送远程调用请求获取返回报文。业务层只需要定义对应的输入DTO和输出DTO以及定义一个远程调用接口QsRemoteHandler,该远程调用接口QsRemoteHandler默认业务处理方法handle(),不需要具体实现,空方法即可。
其中,远程调用接口拦截器QsRemoteHandlerInterceptor的执行脚本为@Around("execution(public*com.XXXX.dpqs.framework.handler.QsRemoteHandl er.handle(..))")。该远程调用接口拦截器针对业务处理逻辑中涉及的远程调用请求的处理过程为:
(1)、获取业务接口的入参元数据信息,比如获取接口ID(serviceID)、scenarioID、DCN(Data Center Node,数据中心)、超时、业务流水、系统流水、是否异步等信息。
(2)、发起远程调用请求,输出调用日志,并在针对远程调用请求的处理过程中会涉及结果返回、异常处理、以及打印结果日志等。
步骤F、记录结果日志以及接口指标日志,并将处理结果(比如针对业务请求报文的业务应答报文)进行缓存。
上述实施例表明,由于现有技术方案依靠业务子系统的开发人员和对接人员的讨论协商来确定该接口的输入输出报文的格式规则,导致业务子系统的接口开发需要耗费较长时间,使得业务子系统的接口开发效率低。基于此,本发明中的技术方案引入应用程序框架,该应用程序框架针对业务接口的输入输出进行反序列化处理以及序列化处理,从而避免了各业务接口各自开发,也统一了各业务接口的处理方式,如此也可以为新业务接口的输入输出报文格式做强制性且具有可扩展性的统一规则提供支持,以确保输入输出报文格式的统一。具体来说,基于应用程序框架,根据业务接口中的接口输入注解确定出反序列化业务请求报文的接口输入报文格式规则,来完成针对业务请求报文的反序列化处理,以及根据业务接口中的接口输出注解确定出用于序列化输出报文对象的接口输出报文格式规则,来完成针对输出报文对象的序列化处理,而无需业务接口来进行业务请求报文的反序列化处理以及进行输出报文对象的序列化处理,可以降低业务子系统的业务接口的代码维护成本,并可以避免开发人员在业务接口开发的过程中因考虑业务接口的输入输出报文格式而导致业务接口的开发时间较长导致业务接口开发效率较低的问题,从而可以提高业务接口的开发效率。
基于相同的技术构思,图5示例性的示出了本发明实施例提供的一种业务接口报文处理装置,该装置可以执行业务接口报文处理方法的流程。
如图5所示,该装置包括:
接收单元501,用于接收业务请求信息;所述业务请求信息包括业务请求报文和业务接口标识;
处理单元502,用于根据所述业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化所述业务请求报文的接口输入报文格式规则;按照所述接口输入报文格式规则,将所述业务请求报文反序列化为所述业务接口的输入报文对象;调用所述业务接口的业务处理逻辑,对所述输入报文对象进行处理,得到输出报文对象;根据所述业务接口中的接口输出注解,确定出用于序列化所述输出报文对象的接口输出报文格式规则;按照所述接口输出报文格式规则,将所述输出报文对象序列化为业务应答报文。
可选地,所述处理单元502还用于:
在调用所述业务接口的业务处理逻辑之前,确定所述输入报文对象的属性符合输入报文属性规则,和/或,所述输入报文对象的内容符合输入报文内容规则;
所述处理单元502还用于:
在将所述输出报文对象序列化为业务应答报文之前,确定所述输出报文对象的属性符合输出报文属性规则,和/或,所述输出报文对象的内容符合输出报文内容规则。
可选地,所述处理单元502具体用于:
调用所述业务接口的输入报文属性校验逻辑,对所述输入报文对象进行属性校验,和/或,调用所述业务接口的输入报文内容校验逻辑,对所述输入报文对象进行内容校验,确定所述输入报文对象的属性是否符合输入报文属性规则,和/或,所述输入报文对象的内容是否符合输入报文内容规则;
所述处理单元502具体用于:
调用所述业务接口的输出报文属性校验逻辑,对所述输出报文对象进行属性校验,和/或,调用所述业务接口的输出报文内容校验逻辑,对所述输出报文对象进行内容校验,确定所述输出报文对象的属性是否符合输出报文属性规则,和/或,所述输出报文对象的内容是否符合输出报文内容规则。
可选地,所述处理单元502还用于:
在接收业务请求信息之前,若存在至少一个新业务接口,则为所述至少一个新业务接口均设置同一接口输入注解以及同一接口输出注解;所述接口输入注解用于指示所述至少一个新业务接口所具有的同一接口输入报文格式规则;所述接口输出注解用于指示所述至少一个新业务接口所具有的同一接口输出报文格式规则。
可选地,所述处理单元502还用于:
在接收业务请求信息之前,若存在至少一个现有业务接口,则针对每个现有业务接口,为所述现有业务接口设置对应的接口输入注解和接口输出注解;所述接口输入注解用于指示所述现有业务接口所具有的接口输入报文格式规则;所述接口输出注解用于指示所述现有接口所具有的接口输出报文格式规则。
可选地,所述处理单元502还用于:
在得到输出报文对象之前,若确定处理所述输入报文对象的过程中出现异常,则根据异常类型确定是否进行主备数据库的切换;
若是,则基于主数据库或备用数据库重新执行所述业务接口的业务处理逻辑。
可选地,所述处理单元502还用于:
在得到输出报文对象之前,若确定处理所述输入报文对象的过程中存在远程调用,则按照远程调用接口的输入报文属性校验逻辑以及输入报文内容校验逻辑,对远程调用请求报文进行校验,并在确定远程调用请求报文的属性符合所述远程调用接口的输入报文属性规则且所述远程调用请求报文的内容符合所述远程调用接口的输入报文内容规则时,发起远程调用请求。
基于相同的技术构思,本发明实施例还提供了一种计算设备,如图6所示,包括至少一个处理器601,以及与至少一个处理器连接的存储器602,本发明实施例中不限定处理器601与存储器602之间的具体连接介质,图6中处理器601和存储器602之间通过总线连接为例。总线可以分为地址总线、数据总线、控制总线等。
在本发明实施例中,存储器602存储有可被至少一个处理器601执行的指令,至少一个处理器601通过执行存储器602存储的指令,可以执行前述的业务接口报文处理方法中所包括的步骤。
其中,处理器601是计算设备的控制中心,可以利用各种接口和线路连接计算设备的各个部分,通过运行或执行存储在存储器602内的指令以及调用存储在存储器602内的数据,从而实现数据处理。可选的,处理器601可包括一个或多个处理单元,处理器601可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理下发指令。可以理解的是,上述调制解调处理器也可以不集成到处理器601中。在一些实施例中,处理器601和存储器602可以在同一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
处理器601可以是通用处理器,例如中央处理器(CPU)、数字信号处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本发明实施例中公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合业务接口报文处理方法实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器602作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。存储器602可以包括至少一种类型的存储介质,例如可以包括闪存、硬盘、多媒体卡、卡型存储器、随机访问存储器(Random AccessMemory,RAM)、静态随机访问存储器(Static Random Access Memory,SRAM)、可编程只读存储器(Programmable Read Only Memory,PROM)、只读存储器(Read Only Memory,ROM)、带电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、磁性存储器、磁盘、光盘等等。存储器602是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本发明实施例中的存储器602还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
基于相同的技术构思,本发明实施例还提供了一种计算机可读存储介质,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行上述业务接口报文处理方法的步骤。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种业务接口报文处理方法,其特征在于,包括:
接收业务请求信息;所述业务请求信息包括业务请求报文和业务接口标识;
根据所述业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化所述业务请求报文的接口输入报文格式规则;
按照所述接口输入报文格式规则,将所述业务请求报文反序列化为所述业务接口的输入报文对象;
调用所述业务接口的业务处理逻辑,对所述输入报文对象进行处理,得到输出报文对象;
根据所述业务接口中的接口输出注解,确定出用于序列化所述输出报文对象的接口输出报文格式规则;
按照所述接口输出报文格式规则,将所述输出报文对象序列化为业务应答报文。
2.如权利要求1所述的方法,其特征在于,在调用所述业务接口的业务处理逻辑之前,还包括:
确定所述输入报文对象的属性符合输入报文属性规则,和/或,所述输入报文对象的内容符合输入报文内容规则;
在将所述输出报文对象序列化为业务应答报文之前,还包括:
确定所述输出报文对象的属性符合输出报文属性规则,和/或,所述输出报文对象的内容符合输出报文内容规则。
3.如权利要求2所述的方法,其特征在于,所述确定所述输入报文对象的属性符合输入报文属性规则,和/或,所述输入报文对象的内容符合输入报文内容规则,包括:
调用所述业务接口的输入报文属性校验逻辑,对所述输入报文对象进行属性校验,和/或,调用所述业务接口的输入报文内容校验逻辑,对所述输入报文对象进行内容校验,确定所述输入报文对象的属性是否符合输入报文属性规则,和/或,所述输入报文对象的内容是否符合输入报文内容规则;
所述确定所述输出报文对象的属性符合输出报文属性规则,和/或,所述输出报文对象的内容符合输出报文内容规则,包括:
调用所述业务接口的输出报文属性校验逻辑,对所述输出报文对象进行属性校验,和/或,调用所述业务接口的输出报文内容校验逻辑,对所述输出报文对象进行内容校验,确定所述输出报文对象的属性是否符合输出报文属性规则,和/或,所述输出报文对象的内容是否符合输出报文内容规则。
4.如权利要求1所述的方法,其特征在于,在接收业务请求信息之前,还包括:
若存在至少一个新业务接口,则为所述至少一个新业务接口均设置同一接口输入注解以及同一接口输出注解;所述接口输入注解用于指示所述至少一个新业务接口所具有的同一接口输入报文格式规则;所述接口输出注解用于指示所述至少一个新业务接口所具有的同一接口输出报文格式规则。
5.如权利要求1所述的方法,其特征在于,在接收业务请求信息之前,还包括:
若存在至少一个现有业务接口,则针对每个现有业务接口,为所述现有业务接口设置对应的接口输入注解和接口输出注解;所述接口输入注解用于指示所述现有业务接口所具有的接口输入报文格式规则;所述接口输出注解用于指示所述现有接口所具有的接口输出报文格式规则。
6.如权利要求1所述的方法,其特征在于,在得到输出报文对象之前,还包括:
若确定处理所述输入报文对象的过程中出现异常,则根据异常类型确定是否进行主备数据库的切换;
若是,则基于主数据库或备用数据库重新执行所述业务接口的业务处理逻辑。
7.如权利要求1所述的方法,其特征在于,在得到输出报文对象之前,还包括:
若确定处理所述输入报文对象的过程中存在远程调用,则按照远程调用接口的输入报文属性校验逻辑以及输入报文内容校验逻辑,对远程调用请求报文进行校验,并在确定远程调用请求报文的属性符合所述远程调用接口的输入报文属性规则且所述远程调用请求报文的内容符合所述远程调用接口的输入报文内容规则时,发起远程调用请求。
8.一种业务接口报文处理装置,其特征在于,包括:
接收单元,用于接收业务请求信息;所述业务请求信息包括业务请求报文和业务接口标识;
处理单元,用于根据所述业务接口标识对应的业务接口中的接口输入注解,确定出用于反序列化所述业务请求报文的接口输入报文格式规则;按照所述接口输入报文格式规则,将所述业务请求报文反序列化为所述业务接口的输入报文对象;调用所述业务接口的业务处理逻辑,对所述输入报文对象进行处理,得到输出报文对象;根据所述业务接口中的接口输出注解,确定出用于序列化所述输出报文对象的接口输出报文格式规则;按照所述接口输出报文格式规则,将所述输出报文对象序列化为业务应答报文。
9.一种计算设备,其特征在于,包括至少一个处理器以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行权利要求1至7任一权利要求所述的方法。
10.一种计算机可读存储介质,其特征在于,其存储有可由计算设备执行的计算机程序,当所述程序在所述计算设备上运行时,使得所述计算设备执行权利要求1至7任一权利要求所述的方法。
CN202110568892.5A 2021-05-25 2021-05-25 一种业务接口报文处理方法及装置 Pending CN113300812A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110568892.5A CN113300812A (zh) 2021-05-25 2021-05-25 一种业务接口报文处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110568892.5A CN113300812A (zh) 2021-05-25 2021-05-25 一种业务接口报文处理方法及装置

Publications (1)

Publication Number Publication Date
CN113300812A true CN113300812A (zh) 2021-08-24

Family

ID=77324595

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110568892.5A Pending CN113300812A (zh) 2021-05-25 2021-05-25 一种业务接口报文处理方法及装置

Country Status (1)

Country Link
CN (1) CN113300812A (zh)

Similar Documents

Publication Publication Date Title
US7013458B2 (en) Method and apparatus for associating metadata attributes with program elements
JP2016106329A (ja) エラーハンドリングをもつトランザクションのグラフ型計算
US8549502B2 (en) Compiler with user-defined type inference rules
US11941447B2 (en) Object-oriented memory client
US7171546B2 (en) CPU life-extension apparatus and method
US20100306766A1 (en) Adding aspects to virtual machine monitors
US5819252A (en) Method and apparatus for handling and detecting an invalid use of a data structure
CN110795091B (zh) 一种模块化路由解耦方法、存储介质、电子设备及系统
WO2020258653A1 (zh) 一种跨节点的数据处理方法及装置
CN113300812A (zh) 一种业务接口报文处理方法及装置
US8745605B2 (en) Execution contexts with polymorphic type implementations
CN115629795A (zh) 一种可执行文件的配置方法、装置及电子设备
US20220374398A1 (en) Object Creation from Schema for Event Streaming Platform
CN111399842B (zh) 一种代码编译方法及装置
CN111737357B (zh) 一种智能合约污点追踪方法及装置
CN115022312A (zh) 多智能合约引擎的实现方法、装置、电子设备及存储介质
Buhr et al. Synchronous and asynchronous handling of abnormal events in the μSystem
CN112925523A (zh) 对象比较方法、装置、设备及计算机可读介质
US6769119B1 (en) System, method, and computer program product for scoping operating system semantics in a computing environment supporting multi-enclave processes
US8135943B1 (en) Method, apparatus, and computer-readable medium for generating a dispatching function
US8165847B2 (en) Implementing a programmable DMA master with write inconsistency determination
US20240192991A1 (en) Object-Oriented Memory Client
CN116700842B (zh) 数据对象的读写方法、装置、计算设备及存储介质
US20080301682A1 (en) Inserting New Transactions Into a Transaction Stream
JP2005228325A (ja) 資源の有限なマイクロ・プロセッサのためのプロセス言語

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