首页> 中国专利> 使用表述性状态转移(REST)应用编程接口(API)进行数据转换的方法、系统和计算机可读介质

使用表述性状态转移(REST)应用编程接口(API)进行数据转换的方法、系统和计算机可读介质

摘要

按照一种方法,所述方法包括:经由REST API从客户端接收第一格式的输入;使用预定元数据将第一格式的输入变换为第二格式的输入;将第二格式的输入发送到使用第二格式的输入进行操作的传统系统;从传统系统接收第二格式的输出,其中所述输出至少部分基于使用第二格式的输入进行的操作;使用预定元数据,将第二格式的输出转换为第一格式的输出;和经由REST API将第一格式的输出发送到客户端。

著录项

  • 公开/公告号CN113227976A

    专利类型发明专利

  • 公开/公告日2021-08-06

    原文格式PDF

  • 申请/专利权人 甲骨文国际公司;

    申请/专利号CN202080007303.X

  • 申请日2020-03-11

  • 分类号G06F9/54(20060101);

  • 代理机构11038 中国贸促会专利商标事务所有限公司;

  • 代理人周磊

  • 地址 美国加利福尼亚

  • 入库时间 2023-06-19 12:07:15

说明书

优先权要求

本申请要求于2019年3月13日提交的序列号为16/352,738的美国专利申请的优先权,该专利申请的公开内容通过引用整体包含在本文中。

技术领域

本文中描述的主题涉及网络通信。更具体地,所述主题涉及使用表述性状态转移(REST)应用编程接口(API)进行数据转换的方法、系统和计算机可读介质。

背景技术

一些计算机系统使用多种数据格式和/或协议进行通信。例如,基于云的计算机系统中的组件可以使用网际协议(IP)、超文本传输协议(HTTP)和/或其他协议进行通信。此外,为了允许各种实体之间的通信,可以支持一个或多个应用编程接口(API),以便为通信提供标准化的方式。

表述性状态转移(REST)API是一种用于提供web服务的API。例如,REST API可以允许两个系统之间经由HTTP的通信。在这个例子中,包含有效负载的HTTP请求被发送到统一资源标识符(URI),例如统一资源定位符(URL),并且作为响应,包含有效负载的HTTP响应可以被提供给请求者。然而,一些系统或其中的组件可能不能处理经由REST API提供的有效负载,因为数据可能是以不支持的格式存储的。

发明内容

公开了使用表述性状态转移(REST)应用编程接口(API)进行数据转换的方法、系统和计算机可读介质。按照一种方法,所述方法包括:经由REST API从客户端接收第一格式的输入;使用预定元数据将第一格式的输入变换为第二格式的输入;将第二格式的输入发送到使用第二格式的输入进行操作的传统(legacy)系统;从传统系统接收第二格式的输出,其中所述输出至少部分基于使用第二格式的输入进行的操作;使用预定元数据,将第二格式的输出变换为第一格式的输出;和经由REST API将第一格式的输出发送到客户端。

按照一种系统,所述系统包括至少一个处理器和使用所述至少一个处理器实现的服务器。所述服务器被配置用于:经由REST API从客户端接收第一格式的输入;使用预定元数据将第一格式的输入变换为第二格式的输入;将第二格式的输入发送到使用第二格式的输入进行操作的传统系统;从传统系统接收第二格式的输出,其中所述输出至少部分基于使用第二格式的输入进行的操作;使用预定元数据,将第二格式的输出变换为第一格式的输出;和经由REST API将第一格式的输出发送到客户端。

本文中描述的主题可以用与硬件和/或固件结合的软件来实现。例如,本文中描述的主题可以用处理器执行的软件来实现。在一些实现中,本文中描述的主题可以使用其上存储有计算机可执行指令的非临时性计算机可读介质来实现,当由计算机的处理器执行时,所述计算机可执行指令控制计算机执行步骤。适合于实现本文中描述的主题的例证计算机可读介质包括非临时性设备,比如盘式存储设备、芯片存储设备、可编程逻辑器件和专用集成电路。另外,实现本文中描述的主题的计算机可读介质可以位于单个设备或计算平台上,或者可以跨多个设备或计算平台分布。

本文中使用的术语“节点”指的是包括一个或多个处理器和存储器的至少一个物理计算平台。

本文中使用的术语“功能”或“模块”指的是用于实现本文中描述的特征的硬件、固件或者与硬件和/或固件结合的软件。

附图说明

现在参考附图说明本文中描述的主题,附图中:

图1是图解说明使用表述性状态转移(REST)应用编程接口(API)进行数据转换的例证环境的示图;

图2A-2B描述用于验证和/或在数据格式间进行变换的例证元数据;

图3描述与在数据格式间进行变换相关的例证默认值数据;

图4描述JavaScript对象表示法(JSON)数据格式的例证请求数据;

图5描述字段列表(FList)数据格式的例证请求数据;

图6描述FList数据格式的例证输出;

图7描述JSON数据格式的例证输出;

图8是图解说明例证的数据转换处理的示图;和

图9是图解说明基于REST的数据变换的例证处理的示图。

具体实施方式

本文中描述的主题涉及使用表述性状态转移(REST)应用编程接口(API)进行数据转换的方法、系统和计算机可读介质。一些提供多种重要服务的系统,例如传统系统或较旧的系统,可以使用一种或多种专有或传统API或协议进行通信。由于这种系统更换起来可能非常昂贵和耗时,因此很可能最终较新的系统将需要与较旧的系统交互,并且较新的系统可能无法配置成进行这样的通信。例如,金融机构或其他企业可能使用最初在20世纪80年代设计的传统系统(例如,数据库、存储系统或后端)。在这个例子中,同一企业还可能使用需要与传统系统或组件通信的现代前端或客户端(例如,基于web的用户界面)。继续该例子,如果传统系统是使用传统API和/或数据格式(例如,字段列表(FList)格式)的计费和收入管理(BRM)系统,那么在处理不同服务域(例如,账户、订阅和账单)中的信息时,FList格式可能无法用于现代客户端。因而,为了能被现代客户端使用,数据需要被转换为兼容的数据格式,例如JSON格式。

一种将传统格式变换为非传统格式的方法可涉及将变换逻辑手工编码到传统系统或中间网关节点中。例如,这样的方法可能涉及手动编码用于创建、更新和获取用于每种类型的多个数据对象(例如账户数据对象、订阅数据对象、支付简档数据对象和计费数据对象)的函数。然而,这样的方法可能导致重复的代码、过度的测试工作、容易出错的行为,并且提供不可预测的性能结果。

按照本文中描述的主题的一些方面,公开了用于基于元数据的数据转换框架的技术、方法或机制,所述数据转换框架可以用于使用元数据,例如由操作员在系统运行时或之前提供的映射模板,将一种数据格式变换为另一种数据格式。例如,例证的数据转换算法或相关框架可以通过定义指示应当如何映射或变换各个数据部分的简单元数据文件,来有效地将FList数据变换为JSON数据,反之亦然。此外,例如,通过执行兼容性测试来判定是否需要修改元数据(例如,映射模板),例如,如果新的字段被添加到服务域,那么可以向JSON/FLIST映射模板添加新的字段,以进行正确的变换或转换,这样的架构可以提供向后兼容性并改进可扩展性。

按照本文中描述的主题的一些方面,公开了用于基于REST的数据转换框架的技术、方法或机制。例如,例证的基于REST的数据转换框架可以利用元数据和REST API,使得所有REST调用(例如,HTTP请求)都使用数据框架或相关的数据转换算法来处理。在这个例子中,由于REST调用由同一框架来处理,因此可以看到每个服务域实体的性能问题和益处,而不会损害数据完整性和性能。

按照本文中描述的主题的一些方面,公开了用于使用反射编程技术的数据转换框架的技术、方法或机制。例如,数据转换系统可以基于元数据在运行时或运行时附近生成变换或转换逻辑。在这个例子中,假设逻辑是用Java或另外的面向对象的编程语言编写的,数据转换系统可以使用元数据来生成代码(例如,多个类、对象、接口和相关逻辑),以将数据从一种格式变换和/或编排成另一种格式,反之亦然。

有利的是,按照本文中描述的主题的一些方面,通过使用元数据和REST API,数据转换框架可以有效地在数据格式之间进行变换,使得较旧的系统可以与较新的客户端或组件通信。此外,通过使用元数据经由反射编程技术得出变换或转换逻辑,代码可以在运行时生成,并且可以定义用于将数据从一种格式转换为另一种格式的逻辑(例如,包括类和/或类的实例或者其他编程结构)。

现在将详细参考本文中描述的主题的各个实施例,附图中图解说明了这些实施例的例子。只要有可能,在附图中都将使用相同的附图标记来指示相同或相似的部件。

图1是图解说明基于REST的数据变换的例证环境100的示图。环境100可以表示一个或多个通信网络。例如,环境100可以表示包含各种网络节点、计算平台、服务器或设备的企业网络和/或因特网。在这个例子中,环境100可以用于发送和接收通信,例如向节点和/或最终用户提供内容或服务。

参见图1,环境100可以包括计算系统102。系统102可以表示用于进行一种或多种功能或服务(例如计费和收入管理(BRM)服务或客户关系管理(CRM)服务)的一个或多个适当的计算平台或设备。在一些实施例中,系统102可以位于单个不同地理位置,并且可以经由内部通信网络进行通信,和/或可以包括位于地理上不同的位置、并且可以经由外部通信网络进行通信的组件(例如,服务器104或传统系统110)。例如,系统102可以部署在由服务提供商管理的专有云网络中,并且可以由订阅的客户经由因特网访问。在另一个例子中,系统102可以使用由企业维护的服务器机房中的一个或多个服务器来实现,或者可以使用由第三方(例如云服务提供商)维护的一个或多个数据中心中的基于云的资源来实现。

系统102可以包括服务器104和传统系统110或者与服务器104和传统系统110交互。服务器104可以表示用于便利各个实体之间的通信的任何适当的一个或多个实体。例如,服务器104可以包括一个或多个处理器、存储器、以及为便利在系统102外部的实体(例如,客户端112)与系统102或相关实体(例如,传统系统110)之间的通信而配置的逻辑。

在一些实施例中,服务器104可以包括用于经由传统或专有API(例如,BRM或云货币化系统使用的门户通信模块(PCM)API或OPCODE API)和/或其他API或协议,与传统系统110或另外的实体进行通信的功能。例如,PCM API可以涉及利用FList格式的数据的服务或功能调用。在这个例子中,服务器104或相关实体可以经由PCM API向传统系统110发送指示要进行的操作的请求和FList数据。继续这个例子,在传统系统110处的处理之后,服务器104或相关实体可以经由PCM API从传统系统110接收FList格式的输出。

传统系统110可以表示用于执行服务或功能的任何适当的一个或多个实体(例如,虚拟机、软件或物理设备),并且可以使用不被所有客户端(例如客户端112)支持的协议和/或数据格式。例如,传统系统110可以包括用于存储、管理或处理财务数据的软件或相关逻辑,并且可以经由专有的、传统的、或者不被客户端112支持的API进行通信。在一些实施例中,传统系统110可以包括使用PCM API或其他API和协议与服务器104或其他实体通信的功能。

在一些实施例中,服务器104可以包括用于经由REST API和/或其他API或协议与客户端112或另外的实体通信的功能。例如,REST API可以经由HTTP消息来利用请求和响应。在这个例子中,服务器104或相关实体可以经由REST API从客户端112接收与传统系统110不兼容的JSON格式的数据,并且可以将JSON格式的数据变换为与传统系统110兼容的FList格式,或者便利JSON格式的数据到与传统系统110兼容的FList格式的变换。继续这个例子,在从传统系统110接收到FList格式的输出之后,服务器104或相关实体可以将FList格式的输出变换为与客户端112兼容的JSON格式的输出,或者便利FList格式的输出到与客户端112兼容的JSON格式的输出的变换,然后可以将包括JSON格式的输出的基于REST的HTTP响应发送到客户端112。

客户端112可以表示用于与系统102、服务器104和/或相关实体交互的任何适当的一个或多个实体(例如,虚拟机、软件或物理设备)。例如,客户端112可以包括用户界面(UI)应用(例如,充当用户前端或门户的基于web的UI)或使用由系统102或相关服务,例如传统系统110存储或管理的数据的其他软件(例如财务软件或商业应用)。在一些实施例中,客户端112可以包括使用REST API和/或其他API和协议与服务器104或其他实体通信的功能。

服务器104可以与数据转换框架(DTF)106交互。在一些实施例中,DTF 106可以包括与服务器104分离的组件和/或与服务器104集成的组件。DTF 106可以表示用于进行与数据变换、数据转换或相关功能有关的各个方面的任何适当的一个或多个实体(例如,在处理器、专用集成电路(ASIC)和/或现场可编程门阵列(FPGA)上执行的软件)。例如,服务器104可以从(例如,源自客户端112的)REST API消息接收JSON数据,并且DTF 106可被配置成将JSON数据变换或转换为可由系统102或相关实体(例如传统系统110)处理的对应FList数据。在另一个例子中,服务器104可以响应从客户端112到系统102的调用或请求,接收源自传统系统110的FList数据,并且DTF 106可被配置成将FList数据变换或转换为可以由客户端112或相关服务(例如web UI或客户端应用)处理的对应JSON数据。

在一些实施例中,DTF 106或相关模块可以管理用于进行数据变换或转换的变换规则和元数据。例如,操作员(例如,软件或方案架构师)或其他实体(例如,管理系统)可以与服务器104或DTF 106通信,并且可以提供一个或多个元数据文件、模板或其他信息,以便进行数据变换或相关数据处理。在这个例子中,服务器104或DTF 106可以处理和存储所接收的数据以供随后使用。

在一些实施例中,DTF 106或相关模块可以管理用于进行数据验证的验证规则和元数据。例如,操作员(例如,软件或方案架构师)或其他实体(例如,管理系统)可以与服务器104或DTF 106通信,并且可以提供一个或多个元数据文件、模板或其他信息,以便进行数据验证或相关数据处理。在这个例子中,服务器104或DTF 106可以处理和存储所接收的数据以供随后使用。

数据存储器108可以表示用于存储与处置通信和/或数据变换关联的数据的任何适当实体(例如,非临时性计算机可读介质、嵌入式存储器或存储设备)。数据存储器108可以存储用于利用各种API和/或协议进行通信的逻辑和/或数据。例如,数据存储器108可以存储元数据和/或相关逻辑(例如默认值、变换器逻辑、格式模板等),以便将数据从一种格式变换为另一种格式(例如,从JSON或XML变换为FList),反之亦然(例如,从FList变换为JSON或XML)。在一些实施例中,数据存储器108可以由服务器104、DTF 106和其他实体访问,并且可以用于各种用途。在一些实施例中,数据存储器108可以位于单个设备或计算平台上,或者可以跨多个设备或计算平台分布。

在一些实施例中,服务器104、DTF 106、或传统系统110可以是分布式计算平台的不同消息处理模块、基于刀片的分布式计算平台中的计算刀片、与单核或多核计算设备关联的处理核心元件、或者在一个或多个物理计算设备上实例化的虚拟节点或机器。

在一些实施例中,服务器104、DTF 106和/或另外的实体可以利用一种或多种编程语言来进行数据转换或变换。在这样的实施例中,服务器104、DTF 106和/或另外的实体可以生成或配置编排器(例如,软件接口或相关代码),用于将数据从第一格式编排成第二格式,以及用于从第二格式反编排数据。

在一些实施例中,编排器可以包括一个或多个函数,当被调用时,所述一个或多个函数可以将实体(例如JSON数据)变换为对应的FList数据,反之亦然。在一些实施例中,可以使用两种类型的编排/反编排实体:一种类型是在实体的上下文中(例如,创建账户、获取账户、更新账户),另一种类型是在搜索的上下文中(例如,查找账户、查找订阅)。

在一些实施例中,服务器104、DTF 106和/或另外的实体可以创建和/或调用编排器来获取、创建、更新或修改实体。例如,设想创建账户请求,DTF 106可以从MarshallerFactory对象实例创建Marshaller对象实例。创建用于创建账户的Marshaller的例证代码是:

Marshaller=MarshallerFactory.getMarshaller(account,ActionEnum.CREATE)。

在该例证代码中,账户是JSON文档的Java对象表示,基于所请求的创建动作,ActionEnum对象实例被定义为‘CREATE’。

在一些实施例中,从JSON数据到FList数据的编排(以及从FList数据到JSON数据的反编排)可以基于所请求的动作而不同。在一些实施例中,ActionEnum对象实例的可能类型包括:CREATE、GET、UPDATE和MODIFY,并且可以对应于或关联到它们各自的HTTP方法:CREATE、GET、PUT和PATCH。

在一些实施例中,在初始化Marshaller对象实例之后,服务器104、DTF 106和/或另外的实体可以调用用于将JSON实体变换为FList数据的编排(marshall)函数。使用Marshaller对象实例调用编排函数的例证代码是:

FList inputFList=marshaller.marshall()。

在一些实施例中,在将JSON实体编排成FList数据之后,服务器104、DTF 106和/或另外的实体可以在传统系统110或由传统系统110调用操作。用于在传统系统110或由传统系统110调用创建客户操作的例证代码是:

FList outputFList=omcService.invokeOperation(PortalOp.CUST_COMMIT_CUSTOMER,inputFList)。

在一些实施例中,在响应于由传统系统110进行的或者在传统系统110进行的提交操作而从传统系统110接收到FList格式的输出之后,服务器104、DTF 106和/或另外的实体可以调用反编排函数,以便将FList格式的输出变换为JSON实体。使用Marshaller对象实例调用反编排函数的例证代码是:

Account retAccount=(Account)marshaller.unmarshallFromFList(outputFList)。

在一些实施例中,服务器104、DTF 106和/或另外的实体可以创建和/或调用编排器来查找一个或多个实体,例如REST API搜索。为搜索创建Marshaller对象实例的例证代码是:

Marshaller=MarshallerFactory.getMarshaller(account,ActionEnum.GET)。

在该例证代码中,ActionEnum对象实例被定义为‘GET’。在一些实施例中,ActionEnum对象实例对于搜索可能无关紧要。在这样的实施例中,为了一致性,在请求搜索时可以使用ActionEnum.Get或另外的ActionEnum类型。

在一些实施例中,在为搜索初始化Marshaller对象实例之后,服务器104、DTF 106和/或另外的实体可以生成JSON搜索实体(例如,rest.model.Search实例)。用于建立搜索实体的例证代码是:

int flags;//0or 256

Listargs=new ArrayList<>();//"Poid","0.0.0.1/strings-10"|"DOMAIN","Reason codes%"

String template;//"select X from/strings where F1=V1 and F2 like V2"

在一些实施例中,在建立或创建搜索实体之后,服务器104、DTF 106和/或另外的实体可以编排函数,以便将JSON搜索实体(例如,rest.model.Search实体)变换为FList数据。使用Marshaller对象实例调用编排函数的例证代码是:

FList inputFList=marshaller.marshall(search)。

在一些实施例中,在将JSON实体编排成FList数据之后,服务器104、DTF106和/或另外的实体可以在传统系统110或由传统系统110调用操作。用于在传统系统110或由传统系统110调用搜索操作的例证代码是:

FList outputFList=omcService.invokeOperation(PortalOp.SEARCH,inputFList)。

在一些实施例中,在响应于由传统系统110进行的或者在传统系统110进行的搜索操作而从传统系统110接收到FList格式的输出之后,服务器104、DTF 106和/或另外的实体可以调用反编排函数,以便将FList数据变换为JSON实体。在一些实施例中,对搜索来说,作为输入,反编排函数可能需要实体类型和要反编排的FList数据。使用Marshaller对象实例调用反编排函数,以生成BillingPreference实体的例证代码是:

ListbillingPreferencesList=(List)marshaller.unmarshallResults("BillingPreference",outputFList);

在一些实施例中,服务器104、DTF 106和/或另外的实体可以调用和/或使用变换器(例如,软件和/或变换规则)来变换字段、数据、或数据的类型。例如,当DTF 106调用编排器来编排/反编排实体时,一个或多个变换器可以用于变换各个数据部分(例如,在元数据或映射模板中定义的字段或FListID)。

在一些实施例中,变换器可以往来于不同的类型变换数据。例如,假设JSON实体包括值为‘Active’的字段‘Status’,但是该FList需要数字状态,那么在变换为FList格式时,DTF 106可能需要使用状态相关变换器将状态值‘Active’变换为‘1001’。

在一些实施例中,变换器可以基于所进行的动作(GET vs CREATE),或者基于字段的值来改变字段名或相关字段标识符(例如,FListID)。例如,取决于产品或实体的类型,JSON字段‘Name’可被变换为不同的FListID,例如,‘charge’产品的字段‘Name’可被变换为FListID‘FLDProduct’,而‘discount’产品的字段‘Name’可被变换为FListID‘FLDDiscount’。

在一些实施例中,服务器104、DTF 106和/或另外的实体可以创建和使用专用或定制的变换器。在这样的实施例中,服务器104、DTF 106和/或另外的实体可以使用元数据(例如,映射模板)来创建一个或多个变换器。例如,如果给定JSON实体的字段需要专门的变换(例如,不同于另外的JSON实体的字段),则可以定义用于该给定JSON实体的专用变换器。在这个例子中,专用变换器可以是在软件包(例如,‘REST.converter’包)中创建的类,并且可以具有类名‘Converter’,其中是JSON实体的名称。

例如,对于‘AccountStatus’实体,DTF106可以使用专用变换器将数字状态值变换为字母状态值。在这个例子中,假设专用变换器将在‘AccountConverter’类中定义,DTF106或另外的实体可以创建‘AccountConverter’类,并且可以定义‘AccountConverter’对象实例的‘status’方法来进行数据变换。‘AccountConverter’类中的‘status’方法的例证代码(注释是以‘//’开头的行)是:

在一些实施例中,当不需要专用变换器时,服务器104、DTF 106和/或另外的实体可以使用基本或默认变换器。例如,如果对于给定实体没有Converter可用或不需要Converter,那么可以调用基本或默认变换器(例如,BaseConverter)。BaseConverter可以处置对于为大多数实体所共有的字段的变换,例如,ID可以是Poid的变换器。在一些实施例中,在Converter中定义的字段将覆盖在BaseConverter中定义的字段,并且如果某个字段在Converter或BaseConverter中都没有定义,那么对于该字段不需要变换。

在一些实施例中,例如,在基于所进行的动作(例如,‘UPDATE’vs‘CREATE’)或基于字段的值存在多个FListID的情况下,服务器104、DTF 106和/或另外的实体可以定义Converter,并且指定要对其进行变换的一个或多个字段。例如,对于‘Account’实体中的字段‘Name’,如果HTTP方法是‘CREATE’,那么字段‘Name’可被变换为FListID‘FldNameCreate’,而如果HTTP方法是‘UPDATE’,那么字段‘Name’可被变换为FListID‘FldNameUpdate’。‘AccountConverter’类中的方法‘name’的例证代码是:

在一些实施例中,变换器可以利用各种输入,例如一个或多个输入。例如,假设Converter.convert(fieldName,value,action,className)是用于调用变换器的方法,那么‘fieldName’可以是要变换的字段的名称(例如,名称、id、状态等),‘value’可以是要变换的字段的实际值(例如,对于状态,‘1001’要被变换),‘action’可以是正在进行的当前动作(例如,CREATE、GET、UPDATE、MODIFY等),或者可以识别类型或相关字段,‘className’可以是正被处理的实体类(例如,Account、Subscription等)。

在一些实施例中,服务器104、DTF 106和/或另外的实体可以调用和/或使用验证器(例如,软件和/或验证规则)来验证字段、数据、或数据的类型。例如,当DTF 106调用编排器来编排/反编排实体时,一个或多个验证器可以用于验证各个数据部分(例如,在元数据或映射模板中定义的字段或FListID)。

在一些实施例中,可以调用验证器来将数据从JSON编排成FList。在一些实施例中,由于可以假设从传统系统110返回的值是有效的,因此可以不调用验证器来将数据从FList反编排成JSON。

在一些实施例中,服务器104、DTF 106和/或另外的实体可以创建并使用专用或定制的验证器。在这样的实施例中,服务器104、DTF 106和/或另外的实体可以使用元数据(例如,映射模板)来创建一个或多个验证器。例如,如果给定JSON实体的字段需要专门的验证(例如,不同于另外的JSON实体的字段),则可以定义用于该给定JSON实体的专用验证器。在这个例子中,专用验证器可以是在软件包(例如,‘REST.validator’包)中创建的类,并且可以具有类名‘Validator’,其中是JSON实体的名称。

例如,对于‘contacts’实体,DTF 106可以验证与联系人关联的若干字段值。在这个例子中,假设专用验证器将在‘AccountValidator’类中定义,DTF 106或另外的实体可以创建‘AccountValidator’类,并且可以定义‘AccountValidator’对象实例的‘contacts’方法来进行数据变换。‘AccountValidator’类中的‘contacts’方法的例证代码(注释是以‘//’开头的行)是:

在一些实施例中,当不需要专用验证器时,服务器104、DTF 106和/或另外的实体可以使用基本或默认验证器。例如,如果对于给定实体没有Validator可用或不需要Validator,那么可以调用基本或默认验证器(例如,BaseValidator)。BaseValidator可以处置对于为大多数实体所共有的字段的验证,例如,ID可以是Poid的验证器。在一些实施例中,在Validator中定义的字段将覆盖在BaseValidator中定义的字段,并且如果某个字段在Validator或BaseValidator中都没有定义,那么对于该字段不需要验证。

要意识到的是图1用于举例说明,并且上面关于图1描述的各个节点、它们的位置和/或它们的功能(例如,模块)可以被改变、更改、添加或移除。例如,一些节点和/或功能可以被组合成单个实体。在另一个例子中,一些节点和/或功能可以跨多个节点和/或平台分布。

图2A-2B描述用于验证和/或在数据格式间进行变换的例证元数据200-202。元数据200-202可以包括用于从不同的数据格式(例如JSON和Flist格式)中识别相关或对应的数据元素的信息。元数据200-202可以包括用于处置一种或两种数据格式的数据存储或数据表示的信息。元数据200-202还可以包括与数据变换相关的信息、逻辑或变换规则。

参见图2A-2B,表示元数据200-202的表包括用于数据条目和关于数据条目的相关描述的列和/或字段。数据条目字段可以存储用于表示数据实体或其部分(例如,数据元素或数据字段)的信息,用于以JSON格式(例如,JSON数据对象)或另外的格式(例如,Flist数据)存储信息。在一些实施例中,数据条目字段还可以包括与数据实体或相关类型相关、或指示数据实体或相关类型的数据类型或例证字段名。

在一些实施例中,元数据200-202可以包括表示数据实体或相关数据的一组相关数据条目。例如,如在图2A的表中所示,一组数据条目可以表示‘Account’数据实体或相关数据。在这个例子中,各种所描述的行或数据条目可以指示与‘Account’数据实体关联的一个或多个字段(类型、账号等)和一个或多个其他数据实体(例如联系人、电话、偏好等)。

在一些实施例中,元数据200-202可以包括用于在数据格式之间关联相关数据元素的映射信息。在一些实施例中,当在数据格式之间变换或转换数据时,DTF 106或相关实体可以使用映射信息。例如,如在图2A的表中所示,JSON字段名‘accountNumber’可以映射到FlistID‘FldAccountNo’。

在一些实施例中,元数据200-202可以包括用于识别在数据变换期间使用的变换器或相关逻辑的信息。例如,服务器104或DTF 106可以使用元数据200-202来识别使用哪个逻辑、规则或软件模块,例如消费者用户账户数据可能需要与商业用户账户数据不同地处理。

在一些实施例中,元数据200-202可以包括用于识别在数据验证期间使用的验证器或相关逻辑的信息。例如,服务器104或DTF 106可以使用元数据200-202来识别某些字段要在数据变换(例如,从JSON变换为FList)之前或期间被验证。在这个例子中,如在图2B的表中所示,JSON‘contacts’数据实体可以与‘validation:[mandatory]’指定关联,因而,DTF 106或相关的验证器可以例如在编排器将值赋予FList数据集之前,对与‘contacts’实体关联的字段值进行验证。

描述字段可以存储用于描述或定义对应数据条目的信息逻辑、上下文或例子。例如,描述字段可以定义如何存储、变换或使用相关数据。在另一个例子中,描述字段可以定义如何导出、获得或生成相关数据。

在一些实施例中,各种描述信息可以被存储和/或表示为编程逻辑、数据变量或其他格式。例如,可以使用‘if/else’来表示何时使用或不使用默认值。

要意识到的是元数据200-202用于举例说明,并且与图2A-2B中所示的数据不同和/或附加的数据可以用于指示变换逻辑、格式偏好、数据格式关系或其他信息。此外,可以使用各种数据结构和/或计算机可读介质来存储(例如,存储在数据存储器108中)或管理元数据200-202。

图3描述与在数据格式间进行变换相关的例证默认值数据300。数据300可以包括用于识别或确定各种数据类型、数据字段和/或数据实体的默认值的信息。例如,数据300可以包括数字、值、文本、和/或供函数或软件获得值的数据指针或标识符。在这个例子中,默认值可以涉及执行方法或函数,例如,用于生成伪随机数或检索计算机的网际协议(IP)地址的代码。

参见图3,表示数据300的表包括用于FList标识符(FListID)类型、FListID类型例子、数据实体映射类型和数据实体映射例子的列和/或字段。FListID类型字段可以存储用于表示FList格式或相关文件中的数据部分(例如,数据元素或数据字段)的类型的信息。例如,例证的FlistID类型可以包括‘IntField’、‘PoidField’、‘StrField’和/或‘ArrayField’。

FListID类型例子字段可以存储用于表示一个或多个FListID的信息,所述一个或多个FListID是FList格式或相关文件中的数据部分(例如,数据元素或数据字段)的对应类型的例子。例如,一些FListID类型例子可以包括‘FldFlags’(‘IntField’类型的例子)、‘FldPayType’(‘IntField’类型的例子)、‘FldPoid’(‘PoidField’类型的例子)、‘FldName’(‘StrField’类型的例子)、‘FldContactType’(‘StrField’类型的例子)、‘FldLocale’(‘StrField’类型的例子)、‘FldAccountNo’(‘StrField’类型的例子)、‘FldBillinfoId’(‘StrField’类型的例子)、和/或‘FldBalInfo’(‘ArrayField’类型的例子)。

数据实体映射类型字段可以存储用于表示JSON格式或相关文件中的数据部分(例如,数据元素或数据字段)的类型的信息。例如,例证的数据实体映射类型可以包括‘int’、‘string’、‘method call’和/或‘null’。在一些实施例中,方法或函数调用可以采用预先定义的和/或其他值或参数作为输入。例如,方法‘generateRandomNumber’可以生成10位的随机数,并且可以包括可选的输入,例如在先的字符串和分隔符。在这个例子中,如果没有提供输入,那么该方法可以生成10位的随机数,例如4827495827。在另一个例子中,如果在该方法中输入了在先的字符串‘ACB’,例如,generateRandomNumber(ABC),那么该方法可以生成前面是该给定字符串的10位随机数,例如,ABC4827495827。在另一个例子中,如果在该方法中输入了在先的字符串‘ACB’和分隔符‘-’,例如,generateRandomNumber(ABC,-),那么该方法可以生成前面是该给定字符串和分隔符的10位随机数,例如,ABC-4827495827。

数据实体映射例子字段可以存储用于表示JSON格式或相关文件中的数据部分(例如,数据元素或数据字段)的信息。一些数据实体映射例子可以指示与FListID(例如,‘FListId:FldPoid’)对应的JSON字段名(例如,‘field:id’)。一些数据实体映射例子可以指示对应FListID的默认值存在,例如,‘FListDefault:true’。一些数据实体映射例子可以指示对应FlistID的默认值,或者调用方法来获取对应的FlistID,例如,‘FListDefaultValue:getName()’。

还要意识到的是数据300用于举例说明,并且与图300中所示的数据不同和/或附加的数据可以用于指示特定数据部分的默认值或其他信息。此外,可以使用各种数据结构和/或计算机可读介质来存储(例如,存储在数据存储器108中)或管理数据300。

图4描述JSON数据格式的例证请求数据400。请求数据400可以是从客户端112生成或提供的数据。例如,客户端112可以表示基于web的UI,所述基于web的UI充当进入基于云的BRM系统(例如,系统102)的用户前端。在这个例子中,该UI可以使用JavaScript或另外的编程语言来编程,并且可以存储JSON格式的用户输入。在这个例子中,客户端112可以生成HTTP POST消息并将其发送到服务器104或DTF 106。HTTP POST消息可以包括用于生成新的计费账户的用户输入(例如,请求数据400)。

如图4中所示,JSON格式的请求数据400通常可以表示花括号“{}”内的实体或对象,其中该对象还可以包括附加的对象和字段或参数。子对象和对象参数可以相对于其父对象缩进。字段可以用引号中的字段名、之后是冒号、然后是其值来表示(例如,“City”:“New York”)。JSON格式的文本值通常在引号之间,而数字值通常不在引号之间。日期为2017年12月的Internet Engineering Task Force(IETF)Request for Comments(RFC)8259提供了关于例证JSON格式的附加细节,其公开内容通过引用包含在本文中。

还要意识到的是请求数据400用于举例说明,并且与图4中所示的数据不同和/或附加的数据可以用于指示用于转换或变换为另外的数据格式的数据或输入。此外,可以使用各种数据结构和/或计算机可读介质来存储或管理请求数据400。

图5描述FList数据格式的例证请求数据500。请求数据500可以从JSON格式变换为FList格式的数据。例如,服务器104或DTF 106可以从客户端112接收请求数据400,并且可以将请求数据400变换或转换为请求数据500。在这个例子中,所述变换或转换可以由使用元数据202-204和/或其他信息配置的编排器来进行。

在一些实施例中,DTF 106或相关软件(例如编排器)可被配置成将数据从一种格式变换或转换为另一种格式的有效数据。例如,通过使用元数据202-204和/或相关的变换规则,DTF 106可以修改某些文本,以允许特定格式的特殊字符,比如单引号或双引号(例如,通过在特殊字符前使用反斜杠或其他‘转义’序列)。在另一个例子中,通过使用元数据202-204和/或相关的变换规则,DTF 106可以将值修改为不同的值,例如,调整数字以适应新格式的有效范围或将值从文本改变为对应的数值。

参见图5,请求数据500可以包括表示将由系统102或传统系统110创建的计费账户的字段和子字段。例如,可以使用元数据202-204来配置DTF 106或相关软件(例如,编排器)。在这个例子中,DTF 106可以通过使用元数据202-204和/或相关的变换规则,从请求数据400中的对应数据中确定相关的字段名和字段值,来生成请求数据500。继续这个例子,在进行数据变换时,DTF 106也可以创建默认值和/或对值进行修改。

如图5中所示,FList格式的一行请求数据500从左至右可以包括指示嵌套级的第一个值(例如,0=顶级、1=子级电平、2=子子级等),指示字段标识符的第二个值(例如,PIN_FLD_BILLINFO、PIN_FLD_POID等),指示字段类型的第三个值(例如,ARRAY、STR、INT等),指示元素标识符的第四个值(例如[0]、[1]等),以及指示字段的值的第五个值(例如文本、存储器指针或数字)。日期为2016年8月的

还要意识到的是请求数据500用于举例说明,并且与图5中所示的数据不同和/或附加的数据可以用于指示由传统系统110处理的数据或输入。此外,可以使用各种数据结构和/或计算机可读介质来存储或管理请求数据500。

图6描述FList数据格式的例证输出。输出600可以是由传统系统110生成或提供的数据。例如,传统系统110可以接收包括请求数据500的PCM请求(也可被称为OPCODE请求),并且可以处理PCM请求。在这个例子中,PCM请求可以涉及添加或创建新的计费账户。继续这个例子,在处理PCM请求之后,可以生成输出600,并且输出600可以被发送到服务器104或其中的DTF 106。

在一些实施例中,输出600可以指示相关请求成功了。例如,输出600可以指示当前或有效的存储数据(例如,处理PCM请求之后的数据)。在这个例子中,客户端112或另外的实体能够检查输出600,并通过检测输出600包括所请求的改变或更新来确定相关请求成功了。

在一些实施例中,输出600可以指示发生了错误或者相关请求(例如HTTP Post消息或HTTP GET消息)不成功。例如,输出600可以包括错误消息或错误代码,或者可以指示当前或有效的存储数据(例如,在PCM请求之前的数据)。在这个例子中,客户端112或另外的实体能够检查输出600,并通过检测错误消息或错误代码来确定相关请求不成功。

参见图6,输出600可以包括表示由系统102或传统系统110创建的计费账户的字段和子字段。例如,输出600可以包括一个或多个计费账户标识符以及用于导出到与系统102或传统系统110关联的计费账户信息的一个或多个URL或链接的信息。

在一些实施例中,可以在尝试进行与请求关联的操作之后生成输出600或相关响应消息。例如,传统系统110可以通过进行数据库提交或更新操作来处理PCM请求,然后生成与该操作相关的输出600。在这个例子中,如果成功,那么传统系统110可以在HTTP 201消息中向服务器104发送所存储的计费账户信息的副本。然而,如果不成功,那么传统系统110可以在HTTP 409消息中发送错误消息或错误代码。

还要意识到的是输出600用于举例说明,并且与图6中所示的数据不同和/或附加的数据可以用于指示用于转换或变换为另外的数据格式的数据或输出。此外,可以使用各种数据结构和/或计算机可读介质来存储或管理输出600。

图7描述JSON数据格式的例证输出700。输出700可以是从FList格式变换为JSON格式的数据。例如,服务器104或DTF 106可以从传统系统110接收输出600,并且可以将输出600变换或转换为输出700。在这个例子中,所述变换或转换可以由使用元数据202-204和/或其他信息配置的编排器来进行。

在一些实施例中,DTF 106或相关软件(例如,编排器或变换器)可被配置成将数据从一种格式变换或转换为另一种格式的有效数据。例如,通过使用元数据202-204和/或相关的变换规则,DTF 106可以从FList数据导出URL,并提供有效的JSON格式的URL。

参见图7,输出700可以包括‘billings Preferences’数据部分,该数据部分包含到存储在系统102或传统系统110或与系统102或传统系统110关联的各种偏好的URL或链接。例如,客户端112可以接收输出700,并且可以使用其中的链接在相关UI中显示超链接。

在一些实施例中,可以检查输出700或相关的响应消息(例如,HTTP Post消息),以判定相关请求是否成功。例如,客户端112可以接收输出700,然后检查来自所提供的URL的信息,以确定成功进行了改变或添加。在另一个例子中,判定相关请求是否成功可以至少部分基于识别响应消息类型,例如,HTTP 2XX消息=成功和HTTP 4XX-5XX消息=失败。

还要意识到的是输出700用于举例说明,并且与图7中所示的数据不同和/或附加的数据可以用于指示给客户端112的数据或输出。此外,可以使用各种数据结构和/或计算机可读介质来存储或管理输出700。

图8是图解说明例证的数据编排处理800的示图。参见图8,当将数据从一种格式编排成另一种格式时,可以进行处理800。

在步骤802,编排器(例如,在服务器104、DTF 106或相关处理器执行的软件)可以接收用于将数据从JSON编排成FList的数据实体(例如,包含多个字段值的JSON对象)。

在步骤804,转换器(例如,在服务器104、DTF 106或相关处理器执行的软件)可以接收用于从JSON转换为FList的值。在一些实施例中,该转换可以按照元数据200-202(例如,映射模板)来进行,并且可能需要数据验证和/或数据变换。

在步骤806,验证器和/或变换器(验证器/变换器)(例如,在服务器104、DTF 106或相关处理器执行的软件)可以接收用于处理的数据实体或相关值。在一些实施例中,验证器/变换器可以基于正被处理的字段或值来利用或调用方法。

在步骤808,监听器(例如,在服务器104、DTF 106或相关处理器执行的软件)可以基于所接收的值和所需的处理来判定是否实例化(例如,创建实例)一个或多个类或对象用于处理。例如,监听器可以启动或实例化用于处理数据实体或其中的值的基本验证器和专用验证器。

在步骤810,可以判定在专用验证器/变换器中是否存在用于处理与所接收的数据实体关联的特定值的对应方法。如果存在该方法,那么专用验证器/变换器可以处理该值。

在步骤812,如果在专用验证器/变换器中不存在该方法,那么可以判定在基本验证器/变换器中是否存在用于处理与所接收的数据实体关联的特定值的对应方法。如果存在该方法,那么基本验证器/变换器可以处理该值。

在一些实施例中,在处理一个值之后(或者如果不需要处理),可以处理来自数据实体的后续值,直到数据实体被完全从JSON编排成FList为止。

还要意识到的是处理800用于举例说明,并且与图8中所示不同的和/或附加的步骤和/或实体可以用于进行数据编排和/或其他数据处理。

图9是图解说明基于REST的数据变换的例证处理的示图。在一些实施例中,处理900或其部分(例如,步骤902、904、906、908、910和/或912)可以由服务器104、DTF 106和/或另外的节点或模块进行或在服务器104、DTF 106和/或另外的节点或模块进行。

参见处理900,在步骤902,可以接收第一格式的输入。例如,包括有效负载的HTTPPUT请求可以从客户端112发送到服务器104,所述有效负载包含JSON格式的数据。在这个例子中,有效负载可以包括用于添加或更新由传统系统110处理的账户的账户信息。

在步骤904,可以使用预定元数据将第一格式的输入变换为第二格式的输入。例如,服务器104或相关的DTF 106可以使用通过使用预定元数据配置的编排器将JSON数据变换或转换为FList数据。

在一些实施例中,第一格式可以是JSON格式或可扩展标记语言(XML)格式,而第二格式可以是FList格式或PCM格式。在一些实施例中,第一格式可以是FList格式或PCM格式,而第二格式可以是JSON格式或XML格式。

在一些实施例中,使用预定元数据将第一格式的数据变换为第二格式的数据可以包括基于要进行的动作(例如,‘Actionenum’)或HTTP方法或请求类型(例如,DELETE、POST、GET、PUT或PATCH)来选择变换规则。

在一些实施例中,变换规则可以包括用于验证第一格式的值的规则和/或用于将无效的第一格式的值改变为第二格式的有效值的规则。

在一些实施例中,使用预定元数据将第一格式的数据变换为第二格式的数据可以包括使用预定元数据和反射编程来生成变换逻辑。例如,反射编程允许软件在运行时检查代码,并基于预定元数据生成用于将数据从一种格式变换为另一种格式的类和/或类的实例或其他结构。

在步骤906,第二格式的输入可以被发送到传统系统110,以便使用第二格式的输入来进行操作。例如,在DTF 106将JSON数据变换为FList数据之后,服务器104可以经由PCMAPI将FList数据发送到传统系统110。在这个例子中

在步骤908,可以从传统系统110接收第二格式的输出,其中该输出可以至少部分基于使用第二格式的输入进行的操作。例如,传统系统110可以处理FList数据(例如,通过添加或更新特定账户的账户信息),并且可以生成FList格式的输出。

在步骤910,可以使用预定元数据将第二格式的输出变换为第一格式的输出。例如,服务器104或相关的DTF 106可以使用通过使用预定元数据配置的编排器将FList数据变换或转换为JSON数据。

在步骤912,可以经由REST API将第一格式的输出发送到客户端112。例如,在将从传统系统110接收的输出变换为JSON数据之后,服务器104可以生成包含JSON数据的HTTP201响应,并将该响应发送到客户端112。

在一些实施例中,可以进行一个或多个向后兼容性测试,以测试数据转换和/或变换是否准确,例如变换后的数据是否有效。例如,服务器104或DTF 106可以执行用于判定从一种格式变换为另一种格式的数据是否有效的测试。在这个例子中,服务器104或DTF 106可以被配置用于确定哪些部分无效或哪些数据丢失,并且可以向最终用户或其他相关实体提供测试数据或相关报告。

在一些实施例中,可以响应从操作员或客户端接收到附加的元数据,触发向后兼容性测试。例如,DTF 106可以在运行时期间接收新的元数据文件,以扩展或扩大转换和/或变换能力。在这个例子中,在接收新的元数据文件之后,DTF 106或相关实体可以在使用元数据文件进行数据转换和/或变换之前,触发一个或多个测试。

在一些实施例中,可以将第一格式的输出发送到客户端112。例如,客户端112可以接收作为一个或多个JSON对象的输出,并且可以使用该数据来填充或更新基于web的用户界面。

在一些实施例中,客户端112可以包括用户界面应用、外部系统、客户关系管理系统、云服务、web服务、REST API客户端或财务软件。

要意识到的是处理900用于举例说明,可以使用不同的和/或附加的动作。还要意识到的是本文中描述的各种动作可以以不同的顺序或序列发生。

应注意的是本文中描述的系统102、服务器104、DTF 106和/或功能可以构成专用计算设备。此外,本文中描述的系统102、服务器104、DTF 106和/或功能可以通过提供用于不同数据格式之间的数据变换的机制和/或技术来改进网络通信的技术领域。例如,通过利用预定的元数据和反射编程原理,可以生成在各种服务域中将JSON数据变换或转换为FList数据或者反过来的软件或变换逻辑。在另一个例子中,通过使用REST API和DTF 106,第一实体(例如,web用户界面应用、前端、财务软件等)可以与使用第一实体不支持的数据格式(例如,FList或PCM)的系统或服务(例如,传统系统110)通信。

应理解的是在不脱离本文中描述的主题的范围的情况下,可以改变本文中描述的主题的各种细节。此外,上述描述只是用于举例说明,而不是为了限制本发明,因为本文中描述的主题由下面的权利要求书定义。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号