java调用restful服务-c 调用 restful 服务
本发明涉及软件开发领域,尤其涉及一种基于c++实现restful服务的方法及系统。
背景技术:
rest风格是面向资源完成api接口设计,rest风格的接口通过http的method方法完成对资源的增、删、改、查等操作。
然而,实现restful服务一般是使用java或者python,具有实现方便的优点,但是在实际的项目升级过程中,有些c++的业务想要迁移成java或者其他代码,工期较长,风险较高,因此,亟需一种基于c++开放的服务更加快速的迁移成restful风格openapi的方法。
技术实现要素:
本发明所要解决的技术问题是针对现有技术的不足java调用restful服务,提供一种基于c++实现restful服务的方法及系统。
本发明解决上述技术问题的技术方案如下:
一种基于c++实现restful服务的方法,包括:
将目标业务能力的c++代码封装成函数,并编译成动态库;
将所述目标业务能力配置到restful服务端框架的配置文件中;
启动所述restful服务端框架,通过读取所述配置文件中所述目标业务能力的配置信息实现所述目标业务能力的调用。
本发明解决上述技术问题的另一种技术方案如下:
一种基于c++实现restful服务的系统,包括:
封装单元,用于将目标业务能力的c++代码封装成函数,并编译成动态库;
配置单元,用于将所述目标业务能力配置到restful服务端框架的配置文件中;
执行单元,用于启动所述restful服务端框架,通过读取所述配置文件中所述目标业务能力的配置信息实现所述目标业务能力的调用。
本发明的有益效果是:本发明通过将目标业务能力的c++代码进行封装,然后通过配置文件的方式进行目标业务能力的调用,实现了将基于c++开放的服务更加快速的迁移成restful风格openapi,大大降低了工程的开发成本,并且使用该框架c++的业务代码基本上不需要太多的修改,大大的降速了迁移风险与成本,保证了工程的进度,实现了更为快速的restful服务实现。
本发明附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。
附图说明
图1为本发明基于c++实现restful服务的方法的实施例提供的流程示意图;
图2为本发明基于c++实现restful服务的方法的其他实施例提供的流程示意图;
图3为本发明基于c++实现restful服务的系统的实施例提供的服务框架示意图;
图4为本发明基于c++实现restful服务的系统的实施例提供的结构框架示意图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实施例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,为本发明基于c++实现restful服务的方法的实施例提供的流程示意图,该方法基于c++实现restful服务,用于在c++编程语言环境中,提供一种框架,快速将原来基于socket提供的服务迁移成基于http1.1协议的restful风格的api,包括:
s1,将目标业务能力的c++代码封装成函数,并编译成动态库;
应理解,目标业务能力是为了实现一定功能的业务,例如,对于电信领域,业务能力可以为月资费计算、年资费计算、账户开通、套餐订购等,每种业务能力通过底层c++代码实现。
其中,以月资费计算为例,可以简单定义这个业务的内容为:根据输入的套餐标识,计算套餐的月租,可以对这个业务使用c语言或c++语言进行能力封装。
可选地,可以将业务能力的源码编译成动态库libcalc.so,通过g++编译器编译。
s2,将目标业务能力配置到restful服务端框架的配置文件中;
可选地,可以将需要开放的业务能力配置到框架的配置文件中restsrv.cfg中。
s3,启动restful服务端框架,通过读取配置文件中目标业务能力的配置信息实现目标业务能力的调用。
应理解,启动框架后,就能把业务能力以restful形式开放出去了,例如,服务器调用地址可以为::1984/resource/calc。
需要说明的是,rest风格的openapi具备以下优点:
1、api基于资源设计接口,已完成了完整的开放数据定义,可以在不增加定义的情况下,由调用方实现新增的业务;
2、多个调用方可基于同一套资源api,各取所需,实现不同的业务;
3、遵守rest风格,可以做到资源无状态,能有效降低资源开放方的性能压力,无横向扩展限制,非常适合分布式架构;
4、计费域各中心的资源api,比计费的中心定义的粒度更小,没有跨中心的资源api设计。
可选地,本发明可以基于corvusoft开发的restbed框架上进行开发restful服务,这种方式最为简单,只需要引入restbed的库函数,只需要配置要开放的http的uri、请求方法以及实现相应的请求所对应的回调函数就可以完美实现对外提供http+restful格式的服务。
因为对restbed官方给出的简单示例进行分析,可以发现涉及到的对象只有三个:resource,settings和service。
其中,resource对象是用于配置http请求行中的uri,例如:resource,请求方法,例如post,以及对应处理请求的回调函数,例如post_method_handler。
settings对象是用于配置服务端的端口号,以及http消息中的属性值等,还有超时时间、连接数等。
service对象是最重要的对象,用于发布服务,与监听请求且提供解析请求行,调用对象的回调函数进行处理。
而回调函数post_method_handler涉及了session对象,session对象是服务端接受到http请求后将连接与请求消息抽象出来的对象,因此,通过源码分析,只需要实现回调函数中对请求包中的响应,并调用session的close函数,将返回的报文传入就实现一个服务的提供。
本实施例通过将目标业务能力的c++代码进行封装,然后通过配置文件的方式进行目标业务能力的调用,实现了将基于c++开放的服务更加快速的迁移成restful风格openapi,大大降低了工程的开发成本,并且使用该框架c++的业务代码基本上不需要太多的修改,大大的降速了迁移风险与成本,保证了工程的进度,实现了更为快速的restful服务实现。
可选地,在一些可能的实施方式中,配置文件中配置有uri地址、能力编码、处理方式、调用方法、动态库名、类名和函数名中的至少一种。
下面给出一种示例性的配置文件结构:
##服务端端口
port="1984"
##并发线程数
threadnum="5"
##对外开放的能力配置
#服务能力:服务编码:处理方式[1,json;2,xml]:调用方式[1,动态库,2,代码集成]:动态库名/类名:函数名
srv_num="1"
srv_list00="/resource/calc:120007:1:1:libcalc.so:calcofferfee"。
其中,处理方式用于设置消息头中的属性值,第一种处理方式为json,第二种处理方式为xml,本领域技术人员也可以根据实际需求选择其他的处理方式。
调用方式限定了函数的调用方式,例如,对于简单的能力直接调用动态库对应的函数,复杂的能力则调用服务端代码中对应的能力类对象对应的能力函数,动态库名和类名根据调用方式二者选其一。
可选地,在一些可能的实施方式中,如图2所示,给出了服务端的处理流程示意图java调用restful服务,下面结合图2对本发明可能的实现方式作进一步说明。对于服务端而言,启动restful服务端框架,通过读取配置文件中目标业务能力的配置信息实现目标业务能力的调用,具体包括:
通过所述回调函数解析所述http请求消息体中的能力编码,与所述配置文件中的能力编码进行匹配,查找对应的目标业务能力;
根据所述目标业务能力的调用方法判断调用动态库或代码集成;
执行所述调用方法,当调用动态库时,根据所述配置文件中的uri地址、动态库名和函数名调用动态库对应的函数;
当代码集成时,根据所述配置文件中的uri地址、类名和函数名调用服务端代码中对应的能力类对象对应的能力函数。
4.根据权利要求3所述的基于c++实现restful服务的方法,其特征在于,所述处理方式包括第一处理方式和第二处理方式,所述第一处理方式为json,所述第二处理方式为xml,所述处理方式用于设置所述http请求消息头中的属性值。
5.根据权利要求3或4中所述的基于c++实现restful服务的方法,其特征在于,接收http请求并解析之后,还包括:
判断所述restful服务端框架是否支持所述请求uri和所述请求方法,如果不支持,则返回错误提示信息。
6.一种基于c++实现restful服务的系统,其特征在于,包括:
封装单元,用于将目标业务能力的c++代码封装成函数,并编译成动态库;
配置单元,用于将所述目标业务能力配置到restful服务端框架的配置文件中;
执行单元,用于启动所述restful服务端框架,通过读取所述配置文件中所述目标业务能力的配置信息实现所述目标业务能力的调用。
7.根据权利要求6所述的基于c++实现restful服务的系统,其特征在于,所述配置文件中配置有uri地址、能力编码、处理方式、调用方法、动态库名、类名和函数名中的至少一种。
8.根据权利要求7所述的基于c++实现restful服务的系统,其特征在于,所述执行单元具体用于接收http请求并解析,根据解析出的请求uri和请求方法查找对应的回调函数;通过所述回调函数解析所述http请求消息体中的能力编码,与所述配置文件中的能力编码进行匹配,查找对应的目标业务能力;根据所述目标业务能力的调用方法判断调用动态库或代码集成;执行所述调用方法,当调用动态库时,根据所述配置文件中的uri地址、动态库名和函数名调用动态库对应的函数;当代码集成时,根据所述配置文件中的uri地址、类名和函数名调用服务端代码中对应的能力类对象对应的能力函数。
9.根据权利要求8所述的基于c++实现restful服务的系统,其特征在于,所述处理方式包括第一处理方式和第二处理方式,所述第一处理方式为json,所述第二处理方式为xml,所述处理方式用于设置所述http请求消息头中的属性值。
10.根据权利要求8或9中所述的基于c++实现restful服务的系统,其特征在于,还包括:判断单元,用于判断所述restful服务端框架是否支持所述请求uri和所述请求方法,如果不支持,则返回错误提示信息。
技术总结
本发明公开了一种基于C++实现RESTFUL服务的方法及系统,涉及软件开发领域。该方法包括:将目标业务能力的C++代码封装成函数,并编译成动态库;将目标业务能力配置到RESTFUL服务端框架的配置文件中;启动RESTFUL服务端框架,通过读取配置文件中目标业务能力的配置信息实现目标业务能力的调用。本发明实现了将基于C++开放的服务更加快速的迁移成restful风格openAPI,大大降低了工程的开发成本,大大的降速了迁移风险与成本,保证了工程的进度,实现了更为快速的RESTFUL服务实现。
技术研发人员:蒋敏钟
受保护的技术使用者:北京思特奇信息技术股份有限公司
技术研发日:2020.08.03
技术公布日:2020.10.30