本发明涉及软件开发技术,尤其涉及一种基于步骤驱动的软件实现方法。
背景技术:
在一些应用场景中,有需要按步骤执行的场景。比如在云计算领域,可以通过服务编排,快速上线一种pass层的服务,这种服务编排可以抽象为一组按步骤执行的操作,通过软件实现这组按步骤执行的操作成为亟待解决的问题。
技术实现要素:
为了解决以上技术问题,本发明提出了一种基于步骤驱动的软件实现方法,可以对抽象为按步骤执行的实际问题,提供软件实现方案,从而提高了软件实现效率。
本发明的技术方案是:
一种基于步骤驱动的软件实现方法,定义一组步骤,将这组步骤按格式形成配置文件;将步骤按顺序向下执行,每一步骤按两种方式执行,每一步骤在同步和异步的情况下进行处理。
进一步的,
将步骤按格式形成配置文件时,在每一个步骤中定义名称、执行类型、参数信息。
进一步的,
每一步骤按两种方式执行,这两种方式为内部函数和api。
进一步的,
在同步和异步情况下进行处理,即
当执行类型是内部函数,通过设置同步标识并通过mq获取异步执行结果;
当执行类型是api,通过设置同步标识并通过回调函数获取异步执行结果。
再进一步的,
执行步骤如下:
(1)调用公共api传入步骤配置文件定义的所需的参数以及对应的值;
(2)创建上下文,上下文里存储传入的参数和其对应的值;每个步骤的执行结果放到上下文里;每个步骤所需用到的参数和其值,从上下文里获取;
(3)将步骤配置文件的每一步配置读取到数据库里或者内存中;
(4)开始执行第一步;
(5)判断类型是内部函数还是api,如果是内部函数,则进入执行内部函数的流程;如果是api,则进入执行api的流程;
如果类型是内部函数,动态调用内部函数,获取函数结果。
如果是同步函数,则直接获取执行结果;
如果执行成功,将结果放入上下文里,继续向下执行一步,如果执行失败,则退出。
如果是异步函数,则无法立即获取执行结果,通过mq,获取异步执行结果。
如果类型是api,调用第三方api,获取响应response。
取response["synflag"]为同步标识;
如果是同步api,则直接获取执行结果response["result"],如果执行成功,将结果放入上下文里,继续向下执行一步,如果执行失败,则退出;
如果是异步api,则无法立即获取执行结果,需要该api回调所涉及的软件程序的api,其uri为/callback,第三方api向该回调api中传入执行结果,如果执行成功,将结果放入上下文里,继续向下执行一步,如果执行失败,则退出。
(6)所有步骤执行完成,则记录整体执行结果,并退出。
本发明的有益效果是
本发明可将实际问题整理为一组步骤,并抽象为软件模型,以此解决需要按步骤执行的实际问题。
附图说明
图1是本发明的执行步骤的流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
具体实施过程如下:
1.定义一组执行步骤
这一组执行步骤,需要按照规范要求来进行定义,并形成配置文件。步骤定义的配置文件样例create.yml如下所示:
说明如下:
其中内部函数,需要遵照一定的规范,要求返回值包括三个部分:
第一个返回值:执行成功后的结果
第二个返回值:同步异步标志,若值为syn,则为同步函数,若值为其他,则为异步函数。
第三个返回值:执行错误后的错误信息
其中执行第三方的api也要遵照一定的规范,要求响应包括三个部分:
其中synflag:同步异步标志,若值为syn,则为同步api,若值为其他,则为异步api
result:执行成功后的结果
error:执行错误后的错误信息
2.提供公共api
uri:/exec
请求方式:post
请求参数:
根据1提供的配置文件,调用公共api的参数如下:
执行步骤时,调用该公共api,将所需参数和值放入values中,values中的每一个元素代表一个步骤,如
代表步骤名称为init的所有参数和值。
3.执行步骤
执行步骤的流程图如附图1所示。
(1)调用公共api传入步骤配置文件定义的所需的参数以及对应的值。
(2)创建上下文,上下文里存储了传入的参数和其对应的值。每个步骤的执行结果也将放到上下文里。每个步骤所需用到的参数和其值,从上下文里获取。
(3)将步骤配置文件的每一步配置读取到数据库里或者内存中。
(4)开始执行第一步。
(5)判断类型是internal还是api,如果是internal,则进入执行内部函数的流程;如果是api,则进入执行api的流程。
(6)如果类型是internal,动态调用内部函数,获取函数结果。如果是同步函数,则可以直接获取执行结果,如果执行成功,将结果放入上下文里,继续向下执行一步,如果执行失败,则退出。如果是异步函数,则无法立即获取执行结果,通过mq(可使用rabbitmq,但不限于rabbitmq),获取异步执行结果。本发明所涉及的软件程序启动时即启动监听rabbitmq的进程,当异步内部函数执行完成,向rabbitmq中发送消息,监听rabbitmq获取执行结果,如果执行成功,则将结果放入上下文里,继续向下执行一步,如果执行失败,则退出。
(7)如果类型是api,调用第三方api,获取响应response。取response["synflag"]为同步标识,如果是同步api,则直接获取执行结果response["result"],如果执行成功,将结果放入上下文里,继续向下执行一步,如果执行失败,则退出。如果是异步api,则无法立即获取执行结果,需要该api回调本发明所涉及的软件程序的api,其uri为/callback,第三方api向该回调api中传入执行结果,如果执行成功,将结果放入上下文里,继续向下执行一步,如果执行失败,则退出。
(8)所有步骤执行完成,则记录整体执行结果,并退出。
以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。