CN112835571A - 一种基于Laravel框架的RESTful API代码的自动生成方法 - Google Patents

一种基于Laravel框架的RESTful API代码的自动生成方法 Download PDF

Info

Publication number
CN112835571A
CN112835571A CN202110125793.XA CN202110125793A CN112835571A CN 112835571 A CN112835571 A CN 112835571A CN 202110125793 A CN202110125793 A CN 202110125793A CN 112835571 A CN112835571 A CN 112835571A
Authority
CN
China
Prior art keywords
data
parameter
instance
model
data model
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110125793.XA
Other languages
English (en)
Other versions
CN112835571B (zh
Inventor
李智
唐光宇
闫乃永
卢学明
张友春
林凡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Baobao Bus Co ltd
Original Assignee
Baobao Bus Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Baobao Bus Co ltd filed Critical Baobao Bus Co ltd
Priority to CN202110125793.XA priority Critical patent/CN112835571B/zh
Publication of CN112835571A publication Critical patent/CN112835571A/zh
Application granted granted Critical
Publication of CN112835571B publication Critical patent/CN112835571B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • G06F8/355Round-trip engineering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于Laravel框架的RESTful API代码的自动生成方法,通过创建资源控制器并且该资源控制器继承了RESTful控制器基类,使得该资源控制器能够拥有RESTful控制器基类的方法组件,且将Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件,并且将Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,开发者仅需创建该资源控制器并配置数据模型映射,该数据模型就自动拥有了增、删、改、查数据接口,当业务变动使得客户端对数据需求产生变化时,仅需对该该资源控制器的配置参数进行调整,无需另外编写代码实现该调整,提高了开发效率,且代码运行过程中不容易出现错误,代码高度内聚,便于后期维护。

Description

一种基于Laravel框架的RESTful API代码的自动生成方法
技术领域
本发明涉及计算机软件领域,尤其涉及一种基于Laravel框架的RESTful API代码的自动生成方法。
背景技术
Laravel是一个由Taylor Otwell所创建的开源PHP Web框架,旨在实现Web软件的MVC架构,Laravel的特色包含:支持用户身份验证和许可,具有模块化的包系统且有专属的包库,提供连接许多种类的关连式数据库的方式,提供工具来协助应用程序的部署和维持,并且发展出许多语法糖,是PHP应用开发领域中较为流行的开发框架。
表现层状态转换(英语:Representational State Transfer,缩写:REST)是RoyThomas Fielding博士于2000年在他的博士论文中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。符合或兼容于这种架构风格(简称为REST或RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。
RESTful架构是目前流行的互联网软件架构,它结构清晰、符合标准、易于理解、扩展方便,得到越来越多网站以及应用的采用。但是在Laravel框架中编写RESTful API,针对每个HTTP请求方法都需要单独定义一个路由独立编写代码,并且随着业务变动客户端对数据需求会发生变化,进而后端必须改动代码以满足客户端数据需求的变化,如果数据涉及到连表关联数据的查询,后端必须新增加一个接口实现该查询,另外,如果需要对客户端请求参数进行校验,需要对每个接口分别编写校验规则代码。除此之外,对数据的分页、排序、筛选等需求都必须特殊处理,因此会导致接口开发人员工作繁琐、开发人员工作量增加的问题发生,使得在Laravel框架中后端接口的开发效率较低,且代码使用过程中容易出现错误和不易于维护的问题。
发明内容
(一)要解决的技术问题
为了解决现有技术的上述问题,本发明提供一种基于Laravel框架的RESTful API代码的自动生成方法,能够提高开发效率。
(二)技术方案
为了达到上述目的,本发明采用的技术方案为:一种基于Laravel框架的RESTfulAPI代码的自动生成方法,包括:
S1、创建一个资源控制器,所述资源控制器继承于RESTful控制器基类,所述RESTful控制器基类包含路由注册组件,在所述资源控制器中设置一个数据模型映射,将所述资源控制器的资源命名空间路径放入资源注册器的资源列表中;
S2、在Laravel框架的引导过程中,载入所述资源注册器,所述资源注册器中包含Laravel路由管理器;
在所述资源注册器中,实例化所述Laravel路由管理器得到Laravel路由管理器实例,所述Laravel路由管理器实例中包含有POST、DELETE、PATCH、GET路由方法的执行函数,载入并遍历所述资源注册器的资源列表,根据所述资源命名空间路径实例化所述资源控制器得到资源控制器实例,并调用所述资源控制器实例中的路由注册组件,将所述Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件;
S3、在所述路由注册组件中,将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,将所述增、删、改、查功能的的方法组件的接口路由地址设置为所述资源控制器的的资源命名空间路径。
(三)有益效果
本发明的有益效果是:通过创建资源控制器并且该资源控制器继承了RESTful控制器基类,使得该资源控制器能够拥有RESTful控制器基类的方法组件,且将Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件,并且将Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,开发者仅需创建该资源控制器并配置数据模型映射,该数据模型就自动拥有了增、删、改、查数据接口,当业务变动使得客户端对数据需求产生变化时,仅需对该该资源控制器的配置参数进行调整,无需另外编写代码实现该调整,提高了开发效率,且代码运行过程中不容易出现错误,代码高度内聚,便于后期维护。
附图说明
图1为本发明的基于Laravel框架的RESTful API代码的自动生成方法的流程图。
具体实施方式
为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。
请参照图1所示,一种基于Laravel框架的RESTful API代码的自动生成方法,包括:
S1、创建一个资源控制器,所述资源控制器继承于RESTful控制器基类,所述RESTful控制器基类包含路由注册组件,在所述资源控制器中设置一个数据模型映射,将所述资源控制器的资源命名空间路径放入资源注册器的资源列表中;
S2、在Laravel框架的引导过程中,载入所述资源注册器,所述资源注册器中包含Laravel路由管理器;
在所述资源注册器中,实例化所述Laravel路由管理器得到Laravel路由管理器实例,所述Laravel路由管理器实例中包含有POST、DELETE、PATCH、GET路由方法的执行函数,载入并遍历所述资源注册器的资源列表,根据所述资源命名空间路径实例化所述资源控制器得到资源控制器实例,并调用所述资源控制器实例中的路由注册组件,将所述Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件;
S3、在所述路由注册组件中,将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,将所述增、删、改、查功能的的方法组件的接口路由地址设置为所述资源控制器的的资源命名空间路径。
从上述描述可知,本发明的有益效果在于:通过创建资源控制器并且该资源控制器继承了RESTful控制器基类,使得该资源控制器能够拥有RESTful控制器基类的方法组件,且将Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件,并且将Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,开发者仅需创建该资源控制器并配置数据模型映射,该数据模型就自动拥有了增、删、改、查数据接口,当业务变动使得客户端对数据需求产生变化时,仅需对该该资源控制器的配置参数进行调整,无需另外编写代码实现该调整,提高了开发效率,且代码运行过程中不容易出现错误,代码高度内聚,便于后期维护。
进一步地,所述S1中在所述资源控制器中设置一个数据模型映射之后还包括:在所述资源控制器分别配置参数校验声明、关联数据声明、排除关联数据声明、方法白名单声明、模型作用域声明和排除模型作用域声明;
所述S3中将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件包括:根据所述资源控制器中的方法白名单声明的要求,将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件;
所述数据模型映射,用于绑定所述资源控制器对应的数据模型;
所述参数校验声明,用于定义客户端传入参数验证规则;
所述关联数据声明,用于接口查询时需要同时连表查询的关联模型;
所述排除关联数据声明,用于接口查询时,排除模型内定义的关联数据模型查询;
所述方法白名单声明,用于过滤RESTful资源控制器支持的HTTP方法,所述HTTP方法默认为GET方法;
所述模型作用域声明,用于客户端在接口查询时,需要对控制器所对应的数据模型进行作用域应用时使用;
所述排除模型作用域声明,用于客户端在接口查询时,需要对控制器所对应的数据模型进行作用域排除时使用。
从上述描述可知,通过在资源控制器中设置数据模型映射,另外设置多种声明,提高了资源控制器的功能性。
进一步地,所述RESTful控制器基类中包含以下方法组件:
模型对象获取组件,用于根据客户端提交的数据模型对象ID,获取所述资源控制器的数据模型映射对应的数据模型对象,如果有获取到则返回所述数据模型对象,没有获取到则抛出HTTP 404错误;
路由注册器,用于所述资源注册器调用,将增、删、改、查功能的方法组件注册到所述路由管理器中;
参数校验器,用于验证客户端所提交的参数是否符合所述的参数校验声明;
字段选择器,用于客户端提交的字段参数范围,指定模型返回的字段范围;
过滤器,用于客户端提交的过滤参数,对参查询数据进行过滤;
关联数据构造器,用于根据所述资源控制器中的所述关联数据声明和排除关联数据声明的关联数据构造关联数据查询;
作用域构造器,用于根据所述资源控制器中声明的所述模型作用域声明和排除模型作用域声明的作用域构造查询作用域。
排序器,用于根据客户端提交的排序字段,对查询数据进行排序;
分页器,用于根据客户端提交的分页大小和分页数参数,对查询数据进行分页;
详情查询构造器,用于构造查询模型单条数据过程;
列表查询构造器,用于构造查询模型列表数据过程;
增、删、改、查功能的方法组件,分别在客户端使用POST、DELETE、PATCH、GET的HTTP方法时调用。
从上述描述可知,通过RESTful控制器基类中包含的方法组件,能够让资源控制器处理实际业务场景中绝大多数常见的数据需求,例如参数筛选、数据过滤、关联查询、排序、分页等数据需求。
进一步地,所述参数校验声明包括创建参数校验声明和更新参数校验声明,分别在创建模型数据和更新模型数据时使用,可用规则包括是否必填、参数类型、长度范围、枚举范围等;
所述关联数据模型包括详情关联数据声明和列表关联数据声明,分别在查询单条数据和多条数据时使用;
所述排除关联数据声明包括详情排除关联数据声明和列表排除关联数据声明,分别在查询单条数据和多条数据时使用,所述排除关联数据声明优先级高于所述关联数据声明;
所述模型作用域声明包括详情模型作用域声明和列表模型作用域声明,分别在查询单条数据和多条数据时使用;
所述排除模型作用域声明包括详情排除模型作用域声明和列表排除模型作用域声明,分别在查询单条数据和多条数据时使用,所述详情排除模型作用域声明优先级高于列表模型作用域声明。
进一步地,在所述参数校验器的执行过程中,首先接收一组客户端的请求数据,并根据请求方式获取对应的所述资源控制器中的参数校验声明,最后将所述请求数据作为参数传入所述Laravel控制器基类中的validate函数进行校验,并返回校验结果;
在所述字段选择器执行过程中,首先接收一个数据模型实例,然后调用所述数据模型实例的字段选择方法,并将客户端提交的字段参数范围作为参数传入,最后返回所述数据模型实例;
在所述所述过滤器执行过程中,首先接收一个数据模型实例,然后将客户端提交的过滤参数,依次对所述数据模型实例进行条件查询赋值,最后返回所述数据模型实例;
在所述关联数据构造器执行过程中,首先接收一个模型实例,然后调用所述数据模型实例的关系预加载方法,将所述资源控制器中声明的关联数据声明作为参数传入,然后调用所述数据模型实例的防止指定关联数据预加载的方法,将所述资源控制器中声明的排除关联数据声明作为参数传入,最后返回所述数据模型实例;
在所述作用域构造器执行过程中,首先接收一个数据模型实例,然后对所述资源控制器中声明的模型作用域声明依次进行应用;
在所述排序器执行过程中,首先接收一个数据模型实例,然后判断客户端是否提交了的排序字段,如果提交了则使用客户端提交的排序字段,否则默认使用ID进行排序,客户端可通过在排序字段前使用“+”和“-”来指定使用正序还是倒序,具体的实现方式是:调用数据模型实例的排序方法,将排序字段和排序方式作为参数传入,最后返回所述数据模型实例;
在所述分页器的执行过程中,首先接收一个数据模型实例,然后判断客户端是否提交了的分页大小参数和当前页参数,如果分页大小参数为“-1”则不进行数据分页,返回所有查询结果,如果只提交了当前页参数,没有提交分页大小参数,则分页大小默认为10,具体的实现方式是:调用所述数据模型实例的查询分页方法将分页大小参数和当前分页数作为参数传入,最后返回数据模型实例。
在所述详情查询构造器的执行过程中,首先通过所述数据模型实例化组件获取一个空的数据模型实例,然后将所述数据模型实例传入所述字段选择器、关联数据构造器和作用域构造器中,然后根据客户端提交的数据模型对象ID作为查询条件,对所述数据模型实例执行查询,如果有结果则返回数据,没有则返回HTTP 404错误;
在所述列表查询构造器的执行过程中,首先通过数据模型实例化组件获取一个空的数据模型实例,然后将所述数据模型实例传入所述字段选择器、关联数据构造器、过滤器、作用域构造器、排序器和分页器中,最后对所述数据模型实例执行查询,并将查询结果返回;
在增功能的方法组件的执行过程中:首先将客户端请求参数交给参数校验器,然后得到校验后的参数,再通过数据模型实例化组件获取空的数据模型实例,然后遍历校验后的参数,将其分别对所述数据模型实例实例赋值,最后保存该实例,整个增功能的方法组件的执行过程在一个数据库事务中;
在删功能的方法组件的执行过程中:首先通过所述模型对象获取组件获取数据模型对象,然后调用模型删除方法,删除所述数据模型对象,整个删除过程在一个数据库事务中执行;
在改功能的方法组件的执行过程中:首先通过所述模型对象获取组件获取数据模型对象,将客户端请求更新参数交给参数校验器,然后将校验后的更新参数对所述数据模型对象进行更新,最后保存所述数据模型对象,整个改功能的方法组件的执行过程在一个数据库事务中;
所述查功能的方法组件包括详情数据查询和列表数据查询,所述详情数据查询通过调用所述详情查询构造器,返回其返回值给客户端,所述列表数据查询通过调用所述列表查询构造器,返回其返回值给客户端。
实施例一
请参照图1所示,一种基于Laravel框架的RESTful API代码的自动生成方法,包括:
S1、创建一个资源控制器,所述资源控制器继承于RESTful控制器基类,所述RESTful控制器基类包含路由注册组件,在所述资源控制器中设置一个数据模型映射,将所述资源控制器的资源命名空间路径放入资源注册器的资源列表中;
S2、在Laravel框架的引导过程中,载入所述资源注册器,所述资源注册器中包含Laravel路由管理器;
在所述资源注册器中,实例化所述Laravel路由管理器得到Laravel路由管理器实例,所述Laravel路由管理器实例中包含有POST、DELETE、PATCH、GET路由方法的执行函数,载入并遍历所述资源注册器的资源列表,根据所述资源命名空间路径实例化所述资源控制器得到资源控制器实例,并调用所述资源控制器实例中的路由注册组件,将所述Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件;
S3、在所述路由注册组件中,将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,将所述增、删、改、查功能的的方法组件的接口路由地址设置为所述资源控制器的的资源命名空间路径。
其中,所述S1中在所述资源控制器中设置一个数据模型映射之后还包括:在所述资源控制器分别配置参数校验声明、关联数据声明、排除关联数据声明、方法白名单声明、模型作用域声明和排除模型作用域声明;
所述S3中将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件包括:根据所述资源控制器中的方法白名单声明的要求,将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件;
所述数据模型映射,用于绑定所述资源控制器对应的数据模型;
所述参数校验声明,用于定义客户端传入参数验证规则;
所述关联数据声明,用于接口查询时需要同时连表查询的关联模型;
所述排除关联数据声明,用于接口查询时,排除模型内定义的关联数据模型查询;
所述方法白名单声明,用于过滤RESTful资源控制器支持的HTTP方法,所述HTTP方法默认为GET方法;
所述模型作用域声明,用于客户端在接口查询时,需要对控制器所对应的数据模型进行作用域应用时使用;
所述排除模型作用域声明,用于客户端在接口查询时,需要对控制器所对应的数据模型进行作用域排除时使用。
其中,所述RESTful控制器基类中包含以下方法组件:
模型对象获取组件,用于根据客户端提交的数据模型对象ID,获取所述资源控制器的数据模型映射对应的数据模型对象,如果有获取到则返回所述数据模型对象,没有获取到则抛出HTTP 404错误;
路由注册器,用于所述资源注册器调用,将增、删、改、查功能的方法组件注册到所述路由管理器中;
参数校验器,用于验证客户端所提交的参数是否符合所述的参数校验声明;
字段选择器,用于客户端提交的字段参数范围,指定模型返回的字段范围;
过滤器,用于客户端提交的过滤参数,对参查询数据进行过滤;
关联数据构造器,用于根据所述资源控制器中的所述关联数据声明和排除关联数据声明的关联数据构造关联数据查询,其关联数据一般为一对一、一对多和多对多的关联关系;
作用域构造器,用于根据所述资源控制器中声明的所述模型作用域声明和排除模型作用域声明的作用域构造查询作用域。
排序器,用于根据客户端提交的排序字段,对查询数据进行排序;
分页器,用于根据客户端提交的分页大小和分页数参数,对查询数据进行分页;
详情查询构造器,用于构造查询模型单条数据过程;
列表查询构造器,用于构造查询模型列表数据过程;
增、删、改、查功能的方法组件,分别在客户端使用POST、DELETE、PATCH、GET的HTTP方法时调用。
其中,所述参数校验声明包括创建参数校验声明和更新参数校验声明,分别在创建模型数据和更新模型数据时使用,可用规则包括是否必填、参数类型、长度范围、枚举范围等;具体地,所述参数校验声明默认为空,即不接受任何参数进行校验;
所述关联数据模型包括详情关联数据声明和列表关联数据声明,分别在查询单条数据和多条数据时使用;
所述排除关联数据声明包括详情排除关联数据声明和列表排除关联数据声明,分别在查询单条数据和多条数据时使用,所述排除关联数据声明优先级高于所述关联数据声明;
所述模型作用域声明包括详情模型作用域声明和列表模型作用域声明,分别在查询单条数据和多条数据时使用;
所述排除模型作用域声明包括详情排除模型作用域声明和列表排除模型作用域声明,分别在查询单条数据和多条数据时使用,所述详情排除模型作用域声明优先级高于列表模型作用域声明。
其中,在所述参数校验器的执行过程中,首先接收一组客户端的请求数据,并根据请求方式(如POST和PATCH的请求方式)获取对应的所述资源控制器中的参数校验声明,最后将所述请求数据作为参数传入所述Laravel控制器基类中的validate函数进行校验,并返回校验结果;
在所述字段选择器执行过程中,首先接收一个数据模型实例,然后调用所述数据模型实例的字段选择方法,并将客户端提交的字段参数范围作为参数传入,最后返回所述数据模型实例;
在所述所述过滤器执行过程中,首先接收一个数据模型实例,然后将客户端提交的过滤参数,依次对所述数据模型实例进行条件查询赋值,最后返回所述数据模型实例;
在所述关联数据构造器执行过程中,首先接收一个模型实例,然后调用所述数据模型实例的关系预加载方法,将所述资源控制器中声明的关联数据声明作为参数传入,然后调用所述数据模型实例的防止指定关联数据预加载的方法,将所述资源控制器中声明的排除关联数据声明作为参数传入,最后返回所述数据模型实例;
在所述作用域构造器执行过程中,首先接收一个数据模型实例,然后对所述资源控制器中声明的模型作用域声明依次进行应用;
在所述排序器执行过程中,首先接收一个数据模型实例,然后判断客户端是否提交了的排序字段,如果提交了则使用客户端提交的排序字段,否则默认使用ID进行排序,客户端可通过在排序字段前使用“+”和“-”来指定使用正序还是倒序,具体的实现方式是:调用数据模型实例的排序方法,将排序字段和排序方式作为参数传入,最后返回所述数据模型实例;
在所述分页器的执行过程中,首先接收一个数据模型实例,然后判断客户端是否提交了的分页大小参数和当前页参数,如果分页大小参数为“-1”则不进行数据分页,返回所有查询结果,如果只提交了当前页参数,没有提交分页大小参数,则分页大小默认为10,具体的实现方式是:调用所述数据模型实例的查询分页方法将分页大小参数和当前分页数作为参数传入,最后返回数据模型实例。
在所述详情查询构造器的执行过程中,首先通过所述数据模型实例化组件获取一个空的数据模型实例,然后将所述数据模型实例传入所述字段选择器、关联数据构造器和作用域构造器中,然后根据客户端提交的数据模型对象ID作为查询条件,对所述数据模型实例执行查询,如果有结果则返回数据,没有则返回HTTP 404错误;
在所述列表查询构造器的执行过程中,首先通过数据模型实例化组件获取一个空的数据模型实例,然后将所述数据模型实例传入所述字段选择器、关联数据构造器、过滤器、作用域构造器、排序器和分页器中,最后对所述数据模型实例执行查询,并将查询结果返回;
在增功能的方法组件的执行过程中:首先将客户端请求参数交给参数校验器,然后得到校验后的参数,再通过数据模型实例化组件获取空的数据模型实例,然后遍历校验后的参数,将其分别对所述数据模型实例实例赋值,最后保存该实例,整个增功能的方法组件的执行过程在一个数据库事务中;
在删功能的方法组件的执行过程中:首先通过所述模型对象获取组件获取数据模型对象,然后调用模型删除方法,删除所述数据模型对象,整个删除过程在一个数据库事务中执行;
在改功能的方法组件的执行过程中:首先通过所述模型对象获取组件获取数据模型对象,将客户端请求更新参数交给参数校验器,然后将校验后的更新参数对所述数据模型对象进行更新,最后保存所述数据模型对象,整个改功能的方法组件的执行过程在一个数据库事务中;
所述查功能的方法组件包括详情数据查询和列表数据查询,所述详情数据查询通过调用所述详情查询构造器,返回其返回值给客户端,所述列表数据查询通过调用所述列表查询构造器,返回其返回值给客户端。
综上所述,本发明提供的一种基于Laravel框架的RESTful API代码的自动生成方法,通过创建资源控制器并且该资源控制器继承了RESTful控制器基类,使得该资源控制器能够拥有RESTful控制器基类的方法组件,且将Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件,并且将Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,使得该资源控制器拥有了增、删、改、查功能的方法组件,当业务变动使得客户端对数据需求产生变化时,可通过继承RESTful控制器基类的方法组件以及增、删、改、查功能的方法组件对该数据需求变化进行调整,无需另外编写代码实现该调整,避免接口开发人员工作繁琐、开发人员工作量增加的问题发生,提高了开发效率,且代码使用过程中不容易出现错误,便于后期维护。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (5)

1.一种基于Laravel框架的RESTful API代码的自动生成方法,其特征在于,包括:
S1、创建一个资源控制器,所述资源控制器继承于RESTful控制器基类,所述RESTful控制器基类包含路由注册组件,在所述资源控制器中设置一个数据模型映射,将所述资源控制器的资源命名空间路径放入资源注册器的资源列表中;
S2、在Laravel框架的引导过程中,载入所述资源注册器,所述资源注册器中包含Laravel路由管理器;
在所述资源注册器中,实例化所述Laravel路由管理器得到Laravel路由管理器实例,所述Laravel路由管理器实例中包含有POST、DELETE、PATCH、GET路由方法的执行函数,载入并遍历所述资源注册器的资源列表,根据所述资源命名空间路径实例化所述资源控制器得到资源控制器实例,并调用所述资源控制器实例中的路由注册组件,将所述Laravel路由管理器实例作为参数传入所述资源控制器实例的路由注册组件;
S3、在所述路由注册组件中,将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件,将所述增、删、改、查功能的的方法组件的接口路由地址设置为所述资源控制器的的资源命名空间路径。
2.根据权利要求1所述的基于Laravel的RESTful API代码的自动生成方法,其特征在于,所述S1中在所述资源控制器中设置一个数据模型映射之后还包括:在所述资源控制器分别配置参数校验声明、关联数据声明、排除关联数据声明、方法白名单声明、模型作用域声明和排除模型作用域声明;
所述S3中将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件包括:根据所述资源控制器中的方法白名单声明的要求,将所述Laravel路由管理器实例中的POST、DELETE、PATCH、GET路由方法的执行函数分别注册为增、删、改、查功能的的方法组件;
所述数据模型映射,用于绑定所述资源控制器对应的数据模型;
所述参数校验声明,用于定义客户端传入参数验证规则;
所述关联数据声明,用于接口查询时需要同时连表查询的关联模型;
所述排除关联数据声明,用于接口查询时,排除模型内定义的关联数据模型查询;
所述方法白名单声明,用于过滤RESTful资源控制器支持的HTTP方法,所述HTTP方法默认为GET方法;
所述模型作用域声明,用于客户端在接口查询时,需要对控制器所对应的数据模型进行作用域应用时使用;
所述排除模型作用域声明,用于客户端在接口查询时,需要对控制器所对应的数据模型进行作用域排除时使用。
3.根据权利要求2所述的基于Laravel的RESTful API代码的自动生成方法,其特征在于,所述RESTful控制器基类中包含以下方法组件:
模型对象获取组件,用于根据客户端提交的数据模型对象ID,获取所述资源控制器的数据模型映射对应的数据模型对象,如果有获取到则返回所述数据模型对象,没有获取到则抛出HTTP 404错误;
路由注册器,用于所述资源注册器调用,将增、删、改、查功能的方法组件注册到所述路由管理器中;
参数校验器,用于验证客户端所提交的参数是否符合所述的参数校验声明;
字段选择器,用于客户端提交的字段参数范围,指定模型返回的字段范围;
过滤器,用于客户端提交的过滤参数,对参查询数据进行过滤;
关联数据构造器,用于根据所述资源控制器中的所述关联数据声明和排除关联数据声明的关联数据构造关联数据查询;
作用域构造器,用于根据所述资源控制器中声明的所述模型作用域声明和排除模型作用域声明的作用域构造查询作用域。
排序器,用于根据客户端提交的排序字段,对查询数据进行排序;
分页器,用于根据客户端提交的分页大小和分页数参数,对查询数据进行分页;
详情查询构造器,用于构造查询模型单条数据过程;
列表查询构造器,用于构造查询模型列表数据过程;
增、删、改、查功能的方法组件,分别在客户端使用POST、DELETE、PATCH、GET的HTTP方法时调用。
4.根据权利要求3所述的基于Laravel的RESTful API代码的自动生成方法,其特征在于,所述参数校验声明包括创建参数校验声明和更新参数校验声明,分别在创建模型数据和更新模型数据时使用,可用规则包括是否必填、参数类型、长度范围、枚举范围等;
所述关联数据模型包括详情关联数据声明和列表关联数据声明,分别在查询单条数据和多条数据时使用;
所述排除关联数据声明包括详情排除关联数据声明和列表排除关联数据声明,分别在查询单条数据和多条数据时使用,所述排除关联数据声明优先级高于所述关联数据声明;
所述模型作用域声明包括详情模型作用域声明和列表模型作用域声明,分别在查询单条数据和多条数据时使用;
所述排除模型作用域声明包括详情排除模型作用域声明和列表排除模型作用域声明,分别在查询单条数据和多条数据时使用,所述详情排除模型作用域声明优先级高于列表模型作用域声明。
5.根据权利要求3所述的基于Laravel的RESTful API代码的自动生成方法,其特征在于,在所述参数校验器的执行过程中,首先接收一组客户端的请求数据,并根据请求方式获取对应的所述资源控制器中的参数校验声明,最后将所述请求数据作为参数传入所述Laravel控制器基类中的validate函数进行校验,并返回校验结果;
在所述字段选择器执行过程中,首先接收一个数据模型实例,然后调用所述数据模型实例的字段选择方法,并将客户端提交的字段参数范围作为参数传入,最后返回所述数据模型实例;
在所述所述过滤器执行过程中,首先接收一个数据模型实例,然后将客户端提交的过滤参数,依次对所述数据模型实例进行条件查询赋值,最后返回所述数据模型实例;
在所述关联数据构造器执行过程中,首先接收一个模型实例,然后调用所述数据模型实例的关系预加载方法,将所述资源控制器中声明的关联数据声明作为参数传入,然后调用所述数据模型实例的防止指定关联数据预加载的方法,将所述资源控制器中声明的排除关联数据声明作为参数传入,最后返回所述数据模型实例;
在所述作用域构造器执行过程中,首先接收一个数据模型实例,然后对所述资源控制器中声明的模型作用域声明依次进行应用;
在所述排序器执行过程中,首先接收一个数据模型实例,然后判断客户端是否提交了的排序字段,如果提交了则使用客户端提交的排序字段,否则默认使用ID进行排序,客户端可通过在排序字段前使用“+”和“-”来指定使用正序还是倒序,具体的实现方式是:调用数据模型实例的排序方法,将排序字段和排序方式作为参数传入,最后返回所述数据模型实例;
在所述分页器的执行过程中,首先接收一个数据模型实例,然后判断客户端是否提交了的分页大小参数和当前页参数,如果分页大小参数为“-1”则不进行数据分页,返回所有查询结果,如果只提交了当前页参数,没有提交分页大小参数,则分页大小默认为10,具体的实现方式是:调用所述数据模型实例的查询分页方法将分页大小参数和当前分页数作为参数传入,最后返回数据模型实例。
在所述详情查询构造器的执行过程中,首先通过所述数据模型实例化组件获取一个空的数据模型实例,然后将所述数据模型实例传入所述字段选择器、关联数据构造器和作用域构造器中,然后根据客户端提交的数据模型对象ID作为查询条件,对所述数据模型实例执行查询,如果有结果则返回数据,没有则返回HTTP 404错误;
在所述列表查询构造器的执行过程中,首先通过数据模型实例化组件获取一个空的数据模型实例,然后将所述数据模型实例传入所述字段选择器、关联数据构造器、过滤器、作用域构造器、排序器和分页器中,最后对所述数据模型实例执行查询,并将查询结果返回;
在增功能的方法组件的执行过程中:首先将客户端请求参数交给参数校验器,然后得到校验后的参数,再通过数据模型实例化组件获取空的数据模型实例,然后遍历校验后的参数,将其分别对所述数据模型实例实例赋值,最后保存该实例,整个增功能的方法组件的执行过程在一个数据库事务中;
在删功能的方法组件的执行过程中:首先通过所述模型对象获取组件获取数据模型对象,然后调用模型删除方法,删除所述数据模型对象,整个删除过程在一个数据库事务中执行;
在改功能的方法组件的执行过程中:首先通过所述模型对象获取组件获取数据模型对象,将客户端请求更新参数交给参数校验器,然后将校验后的更新参数对所述数据模型对象进行更新,最后保存所述数据模型对象,整个改功能的方法组件的执行过程在一个数据库事务中;
所述查功能的方法组件包括详情数据查询和列表数据查询,所述详情数据查询通过调用所述详情查询构造器,返回其返回值给客户端,所述列表数据查询通过调用所述列表查询构造器,返回其返回值给客户端。
CN202110125793.XA 2021-01-29 2021-01-29 一种基于Laravel框架的RESTful API代码的自动生成方法 Active CN112835571B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110125793.XA CN112835571B (zh) 2021-01-29 2021-01-29 一种基于Laravel框架的RESTful API代码的自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110125793.XA CN112835571B (zh) 2021-01-29 2021-01-29 一种基于Laravel框架的RESTful API代码的自动生成方法

Publications (2)

Publication Number Publication Date
CN112835571A true CN112835571A (zh) 2021-05-25
CN112835571B CN112835571B (zh) 2022-05-17

Family

ID=75931057

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110125793.XA Active CN112835571B (zh) 2021-01-29 2021-01-29 一种基于Laravel框架的RESTful API代码的自动生成方法

Country Status (1)

Country Link
CN (1) CN112835571B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113918499A (zh) * 2021-12-16 2022-01-11 深圳市明源云科技有限公司 开放接口生成方法、网络设备及计算机可读存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102346460A (zh) * 2011-05-27 2012-02-08 运软网络科技(上海)有限公司 一种基于事务的服务控制系统及其控制方法
CN103226478A (zh) * 2013-05-22 2013-07-31 北京金和软件股份有限公司 一种自动生成并使用代码的方法
CN104049957A (zh) * 2013-03-13 2014-09-17 成都泰聚泰科技有限公司 基于星形结构的通用业务模型的快速建模框架
CN107357942A (zh) * 2017-09-04 2017-11-17 山东达创网络科技股份有限公司 一种源代码辅助生成工具及其生成方法
EP3688586A1 (en) * 2017-09-30 2020-08-05 Oracle International Corporation Leveraging microservice containers to provide tenant isolation in a multi-tenant api gateway
CN112104486A (zh) * 2020-08-31 2020-12-18 中国—东盟信息港股份有限公司 一种基于Kubernetes容器的网络端点切片的方法及其系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102346460A (zh) * 2011-05-27 2012-02-08 运软网络科技(上海)有限公司 一种基于事务的服务控制系统及其控制方法
CN104049957A (zh) * 2013-03-13 2014-09-17 成都泰聚泰科技有限公司 基于星形结构的通用业务模型的快速建模框架
CN103226478A (zh) * 2013-05-22 2013-07-31 北京金和软件股份有限公司 一种自动生成并使用代码的方法
CN107357942A (zh) * 2017-09-04 2017-11-17 山东达创网络科技股份有限公司 一种源代码辅助生成工具及其生成方法
EP3688586A1 (en) * 2017-09-30 2020-08-05 Oracle International Corporation Leveraging microservice containers to provide tenant isolation in a multi-tenant api gateway
CN112104486A (zh) * 2020-08-31 2020-12-18 中国—东盟信息港股份有限公司 一种基于Kubernetes容器的网络端点切片的方法及其系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
LENIXA: "《laravel的RESTful实现:RESTful资源控制器-通过laravel 学习RESTful》", 《HTTPS://BLOG.CSDN.NET/U010905752/ARTICLE/DETAILS/106751910》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113918499A (zh) * 2021-12-16 2022-01-11 深圳市明源云科技有限公司 开放接口生成方法、网络设备及计算机可读存储介质

Also Published As

Publication number Publication date
CN112835571B (zh) 2022-05-17

Similar Documents

Publication Publication Date Title
US7236973B2 (en) Collaborative master data management system for identifying similar objects including identical and non-identical attributes
US7890543B2 (en) Architecture for distributed computing system and automated design, deployment, and management of distributed applications
US7509326B2 (en) Central master data management
US7676816B2 (en) Systems and methods for integrating services
US9413850B2 (en) Dynamic definition for concurrent computing environments
US9690822B2 (en) System and method for metadata level validation of custom setup objects
US7743090B1 (en) Systems and methods for infrastructure validation
EP1455484A2 (en) Integrating design, deployment, and management phases for systems
CN112306881B (zh) 模拟数据生成方法、装置、设备及存储介质
KR20170086560A (ko) 클라우드 서비스 인프라구조를 위한 도메인-특정 언어를 제공 및 실행하기 위한 시스템 및 방법
US20030055862A1 (en) Methods, systems, and articles of manufacture for managing systems using operation objects
CN112835571B (zh) 一种基于Laravel框架的RESTful API代码的自动生成方法
CN114546563B (zh) 一种多租户页面访问控制方法和系统
CN110018835B (zh) Yang模型配置数据处理方法及装置、终端设备及存储介质
CN117520190A (zh) 一种云桌面客户端及其执行测试的方法
KR20190006349A (ko) 클라이언트-서버 통합 개발 플랫폼 제공 시스템 및 방법
CN116755684B (zh) OAS Schema的生成方法、装置、设备及介质
US20060130051A1 (en) Extensible framework for handling submitted form instance data
CN112612514B (zh) 程序开发方法和装置、存储介质及电子装置
CN105677453B (zh) 任务平台任务处理方法和装置
CN113947391B (zh) 基于web的采招系统管理方法、装置、设备及存储介质
Voldby et al. A modeling tool for system of systems
US20230350747A1 (en) Cross-System Configuration Checks
CN117435177A (zh) 应用程序接口构建方法、系统、设备及存储介质
WO2004023287A2 (en) Collaborative master data management

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant