应用程序编程接口的管理方法和装置与流程

文档序号:20092240发布日期:2020-03-13 07:06阅读:129来源:国知局
应用程序编程接口的管理方法和装置与流程

本申请实施例涉及信息处理领域,尤指一种应用程序编程接口的管理方法和装置。



背景技术:

restfulapi(applicationprogramminginterface,应用程序编程接口)由后台server来提供前端来调用。前端调用api向后台发起http请求,后台响应请求将处理结果反馈给前端。在互联网应用开发中,restfulapi是目前流行的api服务规范,其基本功能是对象的增删查改操作。每个对象都各自对应的api接口。在开发api过程中,每个对象的增删查改操作都需要编写代码来实现功能。

在相关技术中,用来开发restfulapi是大量模板代码实现的;由于需要编写大量模板代码,造成开发周期较长,操作较为繁琐。



技术实现要素:

为了解决上述任一技术问题,本申请实施例提供了一种应用程序编程接口的管理方法和装置。

为了达到本申请实施例目的,本申请实施例提供了一种应用程序编程接口的管理方法,包括:

确定等待生成的restful应用程序编程接口api的对象的信息;

将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能;

在完成继承操作后,得到所述对象信息的restfulapi。

在一个示例性实施例中,所述确定等待生成的restfulapi的对象的信息,包括:

获取等待生成的restfulapi的模型的属性信息;

从所述属性信息中获取所述模型的名称信息,将所述名称信息作为所述对象的信息。

在一个示例性实施例中,所述将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能,包括:

获取所述restfulapi的基本代码中的对象信息;

将所述确定的对象信息替换所述基本代码中的对象信息,成为新的对象信息;

在所述基本代码中,查找所述新的对象信息所实现的自定义功能对应的代码信息,得到所述新的对象信息的自定义功能的代码信息。

在一个示例性实施例中,所述将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能之后,所述方法还包括:

在对所述代码信息进行封装之前,获取等待生成的restfulapi所需实现的目标自定义功能信息;

判断所述基本代码中的全部功能是否满足所述目标自定义功能信息,得到判断结果;

如果判断结果为不满足所述目标自定义功能信息,则获取未实现的自定义功能信息;

获取所述未实现的自定义功能的代码信息,并在得到未实现的管理代码信息后,再执行对所述代码信息进行封装的操作。

在一个示例性实施例中,所述获取所述未实现的自定义功能的代码信息,包括:

获取未实现的每个自定义功能的代码信息;

利用预先设置的继承处理策略中的中间件函数,调用所述未实现的每个自定义功能的代码信息。

一种应用程序编程接口的管理装置,包括处理器和存储器,其中所述存储器存储有计算机程序,所述处理器调用所述存储器中的计算机程序以实现如下操作,包括:

确定等待生成的restful应用程序编程接口api的对象的信息;

将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能;

在完成继承操作后,得到所述对象信息的restfulapi。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述确定等待生成的restfulapi的对象的信息的操作,包括:

获取等待生成的restfulapi的模型的属性信息;

从所述属性信息中获取所述模型的名称信息,将所述名称信息作为所述对象的信息。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能的操作,包括:

获取所述restfulapi的基本代码中的对象信息;

将所述确定的对象信息替换所述基本代码中的对象信息,成为新的对象信息;

在所述基本代码中,查找所述新的对象信息所实现的自定义功能对应的代码信息,得到所述新的对象信息的自定义功能的代码信息。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能的操作之后,所述处理器调用所述存储器中的计算机程序还实现如下操作,包括:

在对所述代码信息进行封装之前,获取等待生成的restfulapi所需实现的目标自定义功能信息;

判断所述基本代码中的全部功能是否满足所述目标自定义功能信息,得到判断结果;

如果判断结果为不满足所述目标自定义功能信息,则获取未实现的自定义功能信息;

获取所述未实现的自定义功能的代码信息,并在得到未实现的管理代码信息后,再执行对所述代码信息进行封装的操作。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述获取所述未实现的自定义功能的代码信息的操作,包括:

获取未实现的每个自定义功能的代码信息;

利用预先设置的继承处理策略中的中间件函数,调用所述未实现的每个自定义功能的代码信息。

本申请实施例提供的实施例,确定等待生成的restfulapi的对象的信息,将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能,并在完成继承操作后,得到所述对象信息的restfulapi,利用继承功能,大幅减少了模板代码的编写成本,提高restapi的开发效率。

另外,本申请提供的实施例还在生成restfulapi过程中,具有很好的扩展性,方便加入自有的逻辑。

本申请实施例的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例而了解。本申请实施例的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本申请实施例技术方案的进一步理解,并且构成说明书的一部分,与本申请实施例的实施例一起用于解释本申请实施例的技术方案,并不构成对本申请实施例技术方案的限制。

图1为本申请实施例提供的应用程序编程接口的管理方法的流程图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请实施例的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请实施例中的实施例及实施例中的特征可以相互任意组合。

一个对象的标准的restfulapi,包括对象的获取、列表、新增、修改和删除。更完备的api还包括对于各种异常状态的错误处理。列表api还应该包括分页查询、条件过滤和排序等功能。

创建一套标准的restfulapi的代码结构大致如下:

以上代码是用户对象api的代码框架。

基于对相关技术中的实现方案的分析,发明人发现,在编写restfulapi过程中,每个对象均需要编写基于上述框架的代码信息,操作效率低。

经发明人技术研究,提供如下的解决方案,具体包括:

图1为本申请实施例提供的应用程序编程接口的管理方法的流程图。图1所示方法包括:

步骤101、确定等待生成的restfulapi的对象的信息;

在一个示例性实施例中,restfulapi的对象信息可以由外部输入,或者,通过预设的解析策略得到该对象信息。

步骤102、将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能;

在一个示例性实施例中,采用继承(extends)router对象实现api的生成。继承是面向对象开发的基本概念,用于实现代码复用。该方法在一个现成的对象基础上,添加一些新功能(代码)从而形成一个新的对象。新对象具有被继承对象所有功能,并额外包括了新添加的功能。

在一个示例性实施例中,使用nodejs作为服务器端开发语言,服务器框架koa,路由框架koa-router,orm对象模型框架objection。这些都是nodejs平台很常用的开发组件。koarouter是一个功能完善的路由对象,使用继承的方法,给router对象添加几个方法,用于快速创建restfulapi。继承后的router对象,本文中可以命名为restrouter。restrouter对象可以当作koarouter来使用,也有快速创建restfulapi的功能。

步骤103、在完成继承操作后,得到所述对象信息的restfulapi。

本申请实施例提供的方法,确定等待生成的restfulapi的对象的信息,将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能,并在完成继承操作后,得到所述对象信息的restfulapi,利用继承功能,大幅减少了模板代码的编写成本,提高restapi的开发效率。

下面对本申请实施例提供的方法进行说明:

在一个示例性实施例中,在一个示例性实施例中,所述确定等待生成的restfulapi的对象的信息,包括:

获取等待生成的restfulapi的模型的属性信息;

从所述属性信息中获取所述模型的名称信息,将所述名称信息作为所述对象的信息。

在一个示例性实施例中,根据初始化传递的模型对象,确定模型对象的的名称,得出路由操作对应的url。

以user模型为例进行说明,属性表示模型对象的名称是”users”,可以得出路由的url是”/users”,则读取对象的url就是”/users/:id”,将读取对象的url挂载到路由对象上。

在一个示例性实施例中,所述将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能,包括:

获取所述restfulapi的基本代码中的对象信息;

将所述确定的对象信息替换所述基本代码中的对象信息,成为新的对象信息;

在所述基本代码中,查找所述新的对象信息所实现的自定义功能对应的代码信息,得到所述新的对象信息的自定义功能的代码信息。

自定义功能为新的对象信息所实现的restfulapi的功能,该功能可以由用户配置完成,完成功能的个性化设置。

在实现继承操作过程中,具体包括如下步骤:

1、根据初始化传递的模型对象,获取模型名称,得出路由url。

以对象模型是user为例进行说明,user模型有属性表示他的名称是”users”,可以得出路由的url是”/users”,则读取对象的url就是”/users/:id”。把这个读取对象的url挂载到路由对象上。

2、挂载的路由需要有一个处理函数来处理该路由发生时的处理步骤。处理读取的函数和上面逻辑类似,主要分3个步骤:

步骤1、解析url获得id,这部分逻辑是完全通用的;

步骤2、用id为参数,从初始化传递的模型对象获取对象实例,得到对象实例;

步骤3、错误处理操作,针对发生的异常情况进行处理,并返回处理结果。

基于上述流程,可以看出,上述步骤基本是通用的,变化的只是模型对象不同,所以可以写成通用的处理函数,用于不同的路由。

在相关技术中,快速完成某些功能的框架带来便捷的同时会牺牲灵活性,在本申请中,由于所使用的框架是继承router对象,它依然具有router对象的所有功能,丝毫不降低灵活性。主要体现在以下两个方面:

一方面,可以给restrouter添加自定义的api。即如果要实现上述功能以外的功能,就和写普通的写法一样,也就是使用被继承的router对象的功能;

另一方面,可以为restapi添加自有逻辑。依然可以使用koarouter的中间件功能。restrouter扩展的方法都支持中间件函数。

在一个示例性实施例中,所述利用预先存储的自定义功能的生成策略,生成所述对象对应的至少一个自定义功能的代码信息之后,所述方法还包括:

在对所述代码信息进行封装之前,获取等待生成的restfulapi所需实现的目标自定义功能信息;

判断所述基本代码中的全部功能是否满足所述目标自定义功能信息,得到判断结果;

如果判断结果为不满足所述目标自定义功能信息,则获取未实现的自定义功能信息;

获取所述未实现的自定义功能的代码信息,并在得到未实现的管理代码信息后,再执行对所述代码信息进行封装的操作。

在一个示例性实施例中,所述获取所述未实现的自定义功能的代码信息,包括:

获取未实现的每个自定义功能的代码信息;

利用预先设置的继承处理策略中的中间件函数,调用所述未实现的每个自定义功能的代码信息。

以read方法为例,如果read方法不带任何参数,表示使用标准的逻辑,代码形式如下:

restrouter.read();

如果需要添加额外逻辑,则给read方法传递一个中间件处理函数,具体如下:

基于上述方式,可在通用处理逻辑之前,之后都可以加入自定义逻辑。非常灵活。

下面对本申请实施例提供的方法进行说明:

restrouter初始化时,需要传入一个模型对象作为参数,表示该路由的增删查改是针对哪个模型对象。

restrouter=restrouter({model:user})

由于每个路由对象的创建、读取、编辑和删除的逻辑都很类似。可以把这些代码逻辑全部封装在几个方法内。

以获取单个用户(read)的api为例,一般的写法是

以上逻辑用新框架实现只要一行代码:

restrouter.read()

在read()方法内部包含了以下几部分内容:

1、根据初始化传递的模型对象,获取模型名称,得出路由url。

上例中对象模型是user。user模型有属性表示他的名称是”users”,我们可以得出路由的url是”/users”,则读取对象的url就是”/users/:id”。我们把这个读取对象的url挂载到路由对象上。

2、挂载的路由需要有一个处理函数来处理该路由发生时的处理步骤。处理读取的函数和上面逻辑类似,主要分3个步骤:

步骤1、解析url获得id,这部分逻辑是完全通用的;

步骤2、用id为参数,从初始化传递的模型对象获取对象实例,得到对象实例;

步骤3、错误处理操作,针对发生的异常情况进行处理,并返回处理结果。

基于上述流程,可以看出,上述步骤基本是通用的,变化的只是模型对象不同,所以可以写成通用的处理函数,用于不同的路由。

其他几个方法的处理方式的相似性,为了进一步简化代码数量,本申请提出采用crud()方法,实现依次调用以下几个方法,具体包括:

restrouter.create()//创建对象;

restrouter.read()//获取单个对象;

restrouter.update()//编辑对象;

restrouter.delete()//删除对象;

restrouter.list()//获取对象列表。

在使用本框架的情况下,生成一组完整规范的restfulapi只要两行代码。

restrouter=restrouter({model:user})

restrouter.crud()

继承对象添加方法和封装成函数方法的区别在于:

本方案的实现是继承对象,并且给对象添加一组方法。“方法”和“函数”在软件开发中基本是同一个事务的不同表述。所以用封装成函数也可以完成同样功能。简单的说两者区别是:本方案的代码更精简,可读性更好,扩展性更好。

以读取api为例,以下两行代码

restrouter=restrouter({model:user})

restrouter.read()

用封装函数的方式改写,假设somemodule是提供了一组封装函数的模块,可能是这样

router=newrouter()

somemodule.init({model:user})

somemodule.read(router)

上述写法,首先不精简。其次阅读性不好。把一些是路由内处理的逻辑,放到另一个地方处理,不合理。扩展性也不好,如果要给read添加自有逻辑就很难处理。可能要给函数添加更多的参数,最终写出来的代码不易解读。

如改成如下形式:

router=newrouter()

router.get(‘/user/:id’,somemodule.read(user))

以上写法,已经和本方案的结构很接近了,但还是不够简洁,且挂载的url要重复填写。

综上可以看出,本申请实施例提供的方法,能够快速实现restfulapi的完整功能,且具有很好的扩展性,方便加入自有的逻辑;且在开发restfulapi过程中大幅减少了模板代码的书写,开发效率明显提升。

一种应用程序编程接口的管理装置,包括处理器和存储器,其中所述存储器存储有计算机程序,所述处理器调用所述存储器中的计算机程序以实现如下操作,包括:

确定等待生成的restful应用程序编程接口api的对象的信息;

将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能;

在完成继承操作后,得到所述对象信息的restfulapi。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述确定等待生成的restfulapi的对象的信息的操作,包括:

获取等待生成的restfulapi的模型的属性信息;

从所述属性信息中获取所述模型的名称信息,将所述名称信息作为所述对象的信息。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能的操作,包括:

获取所述restfulapi的基本代码中的对象信息;

将所述确定的对象信息替换所述基本代码中的对象信息,成为新的对象信息;

在所述基本代码中,查找所述新的对象信息所实现的自定义功能对应的代码信息,得到所述新的对象信息的自定义功能的代码信息。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能的操作之后,所述处理器调用所述存储器中的计算机程序还实现如下操作,包括:

在对所述代码信息进行封装之前,获取等待生成的restfulapi所需实现的目标自定义功能信息;

判断所述基本代码中的全部功能是否满足所述目标自定义功能信息,得到判断结果;

如果判断结果为不满足所述目标自定义功能信息,则获取未实现的自定义功能信息;

获取所述未实现的自定义功能的代码信息,并在得到未实现的管理代码信息后,再执行对所述代码信息进行封装的操作。

在一个示例性实施例中,所述处理器调用所述存储器中的计算机程序以实现所述获取所述未实现的自定义功能的代码信息的操作,包括:

获取未实现的每个自定义功能的代码信息;

利用预先设置的继承处理策略中的中间件函数,调用所述未实现的每个自定义功能的代码信息。

本申请实施例提供的装置,确定等待生成的restfulapi的对象的信息,将预先存储的restfulapi的基本代码作为被继承对象,将确定的对象信息作为继承对象,继承所述基本代码中的全部功能,并在完成继承操作后,得到所述对象信息的restfulapi,利用继承功能,大幅减少了模板代码的编写成本,提高restapi的开发效率。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1