具体实施方式
图1是一示例性实施例示出的一种用以实现数据请求的系统架构图。如图1所示,该系统主要包括:客户端10、无线网关20、前端系统30及后端系统40。其中,客户端10需要通过无线网关20访问前端系统,并通过前端系统30才能访问后端系统40,以提高安全性;另一方面,通过设置前端系统30和后端系统40,可以将在前端系统30部署前端逻辑,后端系统提供可供查询的数据即可,从而实现前后端的分离,进一步提升安全性。其中,后端系统40往往包括多个,客户端10在需要获取用于网页数据(如用户的资产信息)并进行展示时,通常需要通过前端系统30去从多个后端系统40分别请求数据。例如,对于用户的资产信息而言,所需获取的数据可能包括:股票数据,基金数据,第三方支付系统的资金数据等。通常,并不能从这一个后端系统全部获取到不同类型的数据,为此,前端系统30需要调用多个后端系统来分别请求数据并进行聚合,最终将从多个不同的后端系统40获取到的数据返回给客户端10进行展示。
在相关技术中,在需要对将数据请求端访问数据提供端的模式进行改造时,由于数据提供端提供的JSON服务数量通常不止一个,且需要对每一个JSON服务进行上述改造过程,这就导致改造过程非常低效。并且,在涉及到大量JSON服务改造的情况下,开发人员极易犯错,如遗漏某个请求字段等情况,增加了代码改造的风险。另外,对于测试人员来说,大量JSON服务的改造涉及到大量的业务回归测试,大量JSON服务的改造几乎意味着所有线上业务均需回归测试,大大增加了项目的质量风险。为此,提出了如下解决方案。
图2示出了一示例性实施例提供的一种数据请求方法的流程。如图2所示,在一实施例中,该方法通过客户端、前端系统、后端系统之间的交互来实现,其中,前端系统作为数据请求端,后端系统作为数据提供端。该方法可包括下述步骤101~110,其中:
在步骤101中,客户端向前端系统发送页面请求,其中,客户端需要利用用户账号登录前端系统。
在步骤102中,前端系统响应于客户端发送的页面请求,调用后端系统的Facade服务并传入请求对象,在一实施例中,所述请求对象可以为JSON字符串(JSONObject)的格式。该请求对象包含至少一个请求参数值,为了便于后续步骤模拟(MOCK)HTTP请求,所述请求参数值至少包括在所述前端系统登录的用户ID。根据不同需求,请求对象内包含的参数值的类型和数量不受限制,如:在查询用户的资产信息的场景中,JSONObject的格式可以为userID=A+assetId=B,其中,userID为用户ID,assetId为资产ID。
在步骤103中,后端系统根据所述请求对象中包含的请求参数值,将所述请求对象转换为HTTP请求。
由于在对Web的访问模式改造之前,客户端是通过HTTP请求的方式从后端系统请求数据的,为了降低改造效率,尽可能地不改变原有代码(包括Controller层服务),需要将前端系统传来的请求对象模拟(MOCK)为HTTP请求。在一实施例中,可以将传来的请求对象中一个或多个需要的参数值按照HTTP请求的格式插入到HTTP请求的指定位置。在有必要时,还可以根据传来的用户ID查询其他需要插入HTTP请求的信息,如:用户名等,本文对此不作限制。
在一实施例中,将请求对象转换为HTTP请求的示例代码如下:
在步骤104中,后端系统利用所述用户ID模拟用户在后端系统的登录状态。
在一实施例中,步骤104可以具体通过如下过程来实现:
后端系统查询与用户ID对应的用户信息,并将用于指示用户登录状态的变量(上下文环境)赋值为查询到的所述用户信息,其中,所述用户信息可以包括用户ID、用户名等。由于用户只是在前端系统登录,并没有在后端系统登录,为了使得用户具备获取数据的权限,需要在后端系统利用用户信息来模拟登录状态。当然,模拟登录状态的具体过程并不限于以上实施例。
在一实施例中,上述步骤104的示例代码如下:
OperationContextHolder.getPrincipal().setUserId(MobileRpcUtil.getSession UserId())
在步骤105中,后端系统调用与所述HTTP请求对应的Controller层服务进行数据查询。
在步骤106中,后端系统清除对用于指示用户登录状态的变量的赋值。在查询得到数据之后,为了避免他人通过获取用户信息来模拟用户的登录状态,以获得查询到的用户数据,需要对上下文环境中的用户信息进行清除。
在一实施例中,上述步骤106的示例代码如下:
OperationContextHolder.getPrincipal().setUserId(Null)
在步骤107中,后端系统对查询到的数据格式进行格式转换。
在一具体实施例中,可以通过如下过程来实现:
后端系统调用与所述HTTP请求对应的Controller层服务进行数据查询,得到包含至少一个返回参数值的HTTP响应消息。
后端系统将所述HTTP响应消息转换成JSON字符串。当然,根据不同需要,所需转换的格式也作限制。
需说明的是,在其他可行实施例中,上述步骤106和步骤107可以省去,同样可以实现本申请的目的。
在步骤108中,后端系统将格式转换后的数据返回至所述前端系统。
在步骤109中,前端系统对后端系统返回的数据进行处理(如聚合)并返回给客户端。
在步骤110中,客户端进行页面渲染并进行页面展示。
通过以上技术方案可以看出,在数据请求端(前端系统)需要从数据提供端(后端系统)获取数据的过程中,数据提供端(后端系统)可以根据数据请求端(前端系统)传来的包含至少一个请求参数值的请求对象,将所述请求对象转换为HTTP请求,从而可以通过原有的HTTP请求的方式来获取数据并返回给数据请求端(前端系统)。通过上述过程,可以在不改变数据提供端(后端系统)原有的JSON服务、以及Controller层的业务代码的前提下,即可完成对访问模式的改造,进而提高了代码改造的效率。
需说明的是,图2所示的流程中的部分步骤之间的次序可以交换,如:步骤103和步骤104可以交换,步骤106和步骤107可以交换,等等。交换之后同样可以实现本申请的目的。
图3是一示例性实施例示出的另一种数据请求方法的流程。如图3所示,在一实施例中,客户端也可以直接访问后端系统来获取数据,其中,客户端作为数据请求端,后端系统作为数据提供端。该方法可包括下述步骤201~208,其中:
在步骤201中,后端系统响应于客户端发送的页面请求,调用后端系统的Facade服务并传入请求对象。
在步骤202中,将请求对象转换为HTTP请求。
在步骤203中,后端系统利用所述用户ID模拟用户在后端系统的登录状态。
在步骤204中,后端系统调用与所述HTTP请求对应的Controller层服务进行数据查询。
在步骤205中,后端系统清除对用于指示用户登录状态的变量的赋值。
在步骤206中,后端系统对查询到的数据格式进行格式转换。
在步骤207中,后端系统将格式转换后的数据返回至所述客户端。
在步骤208中,客户端进行页面渲染并进行页面展示。
上述步骤201~步骤208可以对应地参照上述图2所示的实施例,在此不再赘具体细节。
图4是一示例性实施例示出的一种从数据提供端的角度来实现的数据请求方法的流程。如图4所示,数据提供端可以为后端系统,该方法可包括下述步骤301~304,其中:
在步骤301中,数据提供端接收数据请求端发送的包含至少一个请求参数值的请求对象,所述请求参数值至少包括在所述数据请求端登录的用户ID。
在步骤302中,数据提供端根据所述请求对象中包含的请求参数值,将所述请求对象转换为HTTP请求。
在步骤303中,数据提供端利用所述用户ID模拟用户在所述数据提供端的登录状态。
在一实施例中,步骤303具体包括:数据提供端查询与所述用户ID对应的用户信息,并将用于指示用户登录状态的变量赋值为查询到的所述用户信息。
在步骤304中,数据提供端调用与所述HTTP请求对应的Controller层服务进行数据查询,并将查询到的数据返回至所述数据请求端。
上述步骤301~步骤304可以对应地参照上述图2所示的实施例,在此不再赘具体细节。
通过上述技术方案,在对web访问模式进行改造时,可以不需要对数据提供端的Controller层、Service层代码作任何变更,大大减低了质量风险,提高了改造效率的同时,有效降低实现成本。
图5示出了一示例性实施例提供的一种电子设备的结构。如图5所示,所述电子设备可以为服务器(如上述后端系统),该电子设备可以包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成数据获取装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
如图6所示,在一软件实施例中,一种数据获取装置,应用于数据提供端,所述装置包括:接收单元401、HTTP转换单元402、模拟登录单元403、服务调用单元404;
所述接收单元401接收数据请求端发送的包含至少一个请求参数值的请求对象,所述请求参数值至少包括在所述数据请求端登录的用户ID;
所述HTTP转换单元402根据所述请求对象中包含的请求参数值,将所述请求对象转换为HTTP请求;
所述模拟登录单元403利用所述用户ID模拟用户在所述数据提供端的登录状态;
所述服务调用单元404调用与所述HTTP请求对应的Controller层服务进行数据查询,并将查询到的数据返回至所述数据请求端。
在一实施例中,所述模拟登录单元403查询与所述用户ID对应的用户信息,并将用于指示用户登录状态的变量赋值为查询到的所述用户信息。
在一实施例中,所述装置还包括赋值清除单元,所述赋值清除单元在查询到数据之后,清除对用于指示用户登录状态的变量的赋值。
在一实施例中,所述请求对象为JSON字符串。
在一实施例中,所述服务调用单元404包括查询单元和格式转换单元;
所述查询单元调用与所述HTTP请求对应的Controller层服务进行数据查询,得到包含至少一个返回参数值的HTTP响应消息;
所述格式转换单元将所述HTTP响应消息转换成JSON字符串并返回至所述数据请求端。
在一实施例中,所述数据提供端为用于提供JSON服务的后端系统,所述数据请求端为客户端和后端系统之间的前端系统,所述前端系统用于与一个或多个后端系统进行交互。
需说明的是,在不相违背的前提下,上述装置实施例和上述方法实施例可以互为补充。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。