api接口说明书(magic-api快速接口开发)(1)

magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口。

快速开始环境搭建

1,引入magic-api-spring-boot-starter依赖

<dependency>

<groupId>org.ssssssss</groupId>

<artifactId>magic-api-spring-boot-starter</artifactId>

<version>1.7.1</version>

</dependency>

2,application.yml 中配置

magic-api:

#配置web页面入口

web: /magic/web

resource:

# location: /data/magic-api

type: database # 配置接口存储方式,这里选择存在数据库中

table-name: magic_api_file # 数据库中的表名

3,启动服务,访问magic-api web页面

http://127.0.0.1:8035/magic-test/magic/web

界面说明

api接口说明书(magic-api快速接口开发)(2)

api接口说明书(magic-api快速接口开发)(3)

api接口说明书(magic-api快速接口开发)(4)

api接口说明书(magic-api快速接口开发)(5)

使用教程请求参数获取

1,RequestParam

GET http://localhost:9999/xxx/xxx?name=abc&age=49

这样的URL参数magic-api 会自动将name和age映射为同名变量

2,表单参数

POST http://localhost:9999/xxx/xxx

name=abc&age=49

这样的表单参数magic-api 也会自动将name和age映射为同名变量。

3,Request header参数获取

magic-api 会对所有RequestHeader统一封装为一个名为header的变量 如要获取 token 可以通过header.token 来获取。

4,POST请求的Request Body参数获取

{

"name": "magic-api"

}

如要获取name属性 则可通过 body.name 来获取

5,Path参数获取

主要是针对URL定义为http://localhost:9999/user/{id} 的类似接口

如要获取path路径上的id可通过path.id 或 id来获取

6,cookie,session参数获取

可以通过cookie.xxx,session.xxx来获取

SQL参数获取

1,#{} 注入参数,${} 拼接参数

作用和Mybatis用法一致

id = #{id};

id=${id};

2,动态SQL参数

通过?{condition,expression}来实现动态拼接SQL,如果条件成立则拼接后部分内容SQL中,与mybatis中的if标签基本一致

return db.select("select * from sys_user ?{id,where id = #{id}}");

相当于mybatis中的<if test="id != nulla nd id != ''">

3,Mybatis 语法支持

1.6.0以后的版本支持Mybatis语法

单表CRUD操作

操作入口 db.table('table_name')

1,insert

return db.table('sys_user').insert({ user_name : '李富贵', role : 'admin'})

// insert into sys_user(user_name,role) values('李富贵','admin')

2,update

return db.table('base_dict').primary('code').update({ code: 'insertTerst', name : '测试insert'})

//update base_dict set name = ? where code = ?

3,save

用法和insert相似

return db.table('sys_user').primary('id', uuid()).save({user_name: '李富贵'});

// insert into sys_user(id,user_name) values('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','李富贵');

4,select,page,where

return db.table('sys_user').select()

return db.table('sys_user').page()

return db.table('sys_user')

.where()

.like('user_name','%李富贵%')

.eq('role','admin')

.select()

分页

yml中配置分页参数

magic-api:

page-config:

size: size # 页大小的请求参数名称

page: page # 页码的请求参数名称

default-page: 1 # 未传页码时的默认首页

default-size: 10 # 未传页大小时的默认页大小

自动分页

使用yml中配置的分页参数

return db.page("""select * from base_dict_detail""")

手动分页

跳过前3条记录,然后取5条

return db.page("""select * from base_dict_detail""",5,3)

自定义分页参数获取

实现 PageProvider接口,复写getPage方法 {

public Page getPage(RuntimeContext runtimeContext) {

long page = 2;

long pageSize = 3;

return new Page(pageSize, (page - 1) * pageSize);

}

此模式会覆盖yml的配置内容

统一请求响应

目前内置了三种状态码,分别为 执行成功(1),参数验证失败(0),以及系统异常(-1)

自定义状态码

magic-api:

response-code-config:

success: 200 #执行成功的code值

invalid: 400 #参数验证未通过的code值

exception: 500 #执行出现异常的code值

默认返回格式

{

"code": 1, // 状态码

"message": "success", // 状态说明

"data": ..., // 返回的数据内容

"timestamp": 1629610503506, // 服务器时间

"executeTime": 1 // 执行时间

}

自定义返回格式

magic-api:

response: |- #配置JSON格式,格式为magic-script中的表达式

{

code: code,

message: message,

data,

timestamp,

requestTime,

executeTime,

}

自定义结构配置

实现ResultProvider接口,重写buildResult方法

api接口说明书(magic-api快速接口开发)(6)

Swagger文档生成

引入swagger依赖

在yml文件中配置

magic-api:

swagger-config:

version: 1.0.0

description: magic测试文档

title: magic测试

name: 配置化实现

location: /v2/api-docs/magic-api/swagger2.json

原理分析

Magic-api通过springboot自动配置的方式配置了resource,dataSource,interceptor等内容。

接口注册

在服务启动时,生成MagicConfiguration注入容器时,通过mappingHandlerMapping.registerAllMapping();来注册所有映射(即在界面上配置的接口请求地址和接口的实际处理类、方法的映射)。映射关系注册到handleMapping中,并在内存中通过ConcurrentHashMap来缓存映射关系

api接口说明书(magic-api快速接口开发)(7)

api接口说明书(magic-api快速接口开发)(8)

api接口说明书(magic-api快速接口开发)(9)

接口调用

接口调用时,在DispatcherServlet中通过url去寻找handler,找到magic-api的统一处理RequestHandler以及处理方法invoke。

在invoke中根据请求方法和路径获取接口信息封装在ApiInfo中,然后进行参数的验证封装。实际脚本的执行,以及对返回结果的包装

api接口说明书(magic-api快速接口开发)(10)

api接口说明书(magic-api快速接口开发)(11)

api接口说明书(magic-api快速接口开发)(12)

api接口说明书(magic-api快速接口开发)(13)

api接口说明书(magic-api快速接口开发)(14)

,