萌新妹纸不会写后端代码,还不是照样开发API速度贼快

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 萌新妹纸不会写后端代码,还不是照样开发API速度贼快

Magic-API 是什么

Magic-API是一个接口框架,可以快速开发服务接口程序,是一个纯Java开源项目。

开发人员只要用magic-api的可视化界面完成,无需Java编码,配置完成后,自动发布为HTTP服务。

什么,你还写controller、dao?这种Java类根本不用写,只要配置脚本,就能完成绝大部分的Restful服务开发。

简化所需Java知识背景,只要会写SQL,直接就能做数据

一、特点

  1. 支持常规关系型数据库,比如MySQL,Oracle等常见的
  2. 还支持Redis、MongoDB、ES等非关系型,DataW等同类产品不支持
  3. 配置数据以文件形式存放,DataW等需要建个数据库存配置
  4. 支持在线调试
  5. 支持参数配置,比如必填、格式等等
  6. 支持Linq,做.net的觉得很好,未来可期
  7. 支持实现上传下载流的API,而非简单的文本交互
  8. 支持脚本中混排Java代码
  9. 支持脚本的版本管理

二、尝试使用

2.1 准备工作

数据库:MySQL

表:用户信息表 t_user

列名 含义 类型
id 序号 integer
account 登录名 varchar
name 昵称 varchar
gender 性别 varchar
avatar 头像 varchar

2.2 目标

  1. 不写controller、不写dao、没有orm配置、没有实体类等针对此表的Java代码
  2. 快速创建针对表CRUD的API
  3. 实现复杂的查询数据API
  4. 接口参数控制管理

三、开发步骤

3.1 创建新项目

1.新建SpringBoot项目:magicdemo,包名 com.demo.magic

2.pom.xml加入以下内容

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
  <groupId>org.ssssssss</groupId>
  <artifactId>magic-api-spring-boot-starter</artifactId>
  <version>2.0.1</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>

3.配置application.yml

简易配置,只需配置以下内容

magic-api:
  resource:
    location: d:/cfg/magic-api #配置文件存储位置。当以classpath开头时,为只读模式
  web: /magic/web #配置web页面入口
server:
  port: 6408
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.2.133:3306/test?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: testuser
    password: testpass
    type: com.zaxxer.hikari.HikariDataSource

如果需要,可以对magic-api的内容做更复杂的配置,例如:

magic-api:
  resource:
    location: d:/cfg/magic-api #配置文件存储位置。当以classpath开头时,为只读模式
  web: /magic/web #配置web页面入口
  page: # 可不配置, 后续内容全会用默认值
    size: size # 页大小的请求参数名称 缺省时为size
    page: page # 页码的请求参数名称 缺省时为page
    default-page: 1 # 自定义默认首页 缺省时为1
    default-size: 10 # 自定义为默认页大小 缺省时为10
  response-code: # 可不配置
    success: 200 #执行成功的code值
    invalid: 400 #参数验证未通过的code值
    exception: 500 #执行出现异常的code值

复杂配置可对分页、状态码等内容做自定义,具体可参考官方文档 https://www.ssssssss.org/magic-api

配置完成后,启动boot项目,控制台将会出现以下文字:

服务启动成功,magic-api已内置启动! Access URLs:
接口本地地址:   http://localhost:6408/
接口外部地址:   http://192.168.2.133:6408/
接口配置平台:   http://192.168.2.133:6408/magic/web/index.html

此时打开配置平台地址就可以使用了,完全不用写业务代码

3.2 配置CRUD的API

本阶段目标:

1.通过配置完成 t_user 表的CRUD功能实现

2.仅在控制台上做脚本配置,不写任何一个java文件

3.2.1 创建分组

点击新建分组

组名:用户管理
路径:user

3.2.2 创建查询列表

1.右键分组user,新建接口

2.下方接口信息里输入:

请求方法:get
接口名称:查询全部用户
接口路径:listall

3.右侧的大文本框内,输入以下脚本

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

4.点击右上方运行,或者ctrl+Q,就会在下方控制台输出响应内容

{
    "code": 200,
    "message": "success",
    "data": [{
        "id": 1,
        "account": "xiaoming",
        "name": "小明",
        "gender": "男",
        "avatar": "https://www.qq.com/logo.png"
    }, {
        "id": 2,
        "account": "xiaohong",
        "name": "小红",
        "gender": "女",
        "avatar": "https://www.qq.com/logo2.png"
    }],
    "timestamp": 1660810934840,
    "executeTime": 30
}

我们第一个API就实现完成了。

此时可以使用发布路径调试,在浏览器访问 http://192.168.2.133:6408/user/listall

就会看到和调试相同的结果。

3.2.3 创建保存方法

保存API的实现,我们要求request传入body,为json格式的t_user表内容,然后进行保存

1.右键分组user,新建接口

2.下方接口信息里输入:

请求方法:post
接口名称:保存新用户
接口路径:save

3.右侧的大文本框内,输入以下脚本

return db.table('t_user').insert(body)

4.在下方接口信息的请求body里,输入以下内容,t_user表的id由于数据表设为自增,body不赋值

{
    "account": "xiaoling",
    "name": "小玲",
    "gender": "女",
    "avatar": "https://www.qq.com/face.png"
}

点击右上方运行,就会在下方控制台输出响应内容

{
    "code": 200,
    "message": "success",
    "data": 4,
    "timestamp": 1660811763708,
    "executeTime": 22
}

5.此时查询数据库,就会看到新插入的记录了

3.2.4 创建更新方法

更新和保存很相似,仍然是通过post,将body内容更新数据表

1.前面步骤类似,创建update接口,脚本内容为:

# primary表示根据主键id进行更新
return db.table('t_user').primary("id").update(body)

2.测试body如下:

{
    "id": 3,
    "account": "xiaoling3",
    "name": "小玲3",
    "gender": "男",
    "avatar": "https://www.qq.com/face3.png"
}

结果提示成果,数据表内容也改了。

3.2.5 saveOrUpdate的实现

经常使用ORM的同学,习惯于用saveOrUpdate的方式,自动决定insert还是update,脚本里可以使用save实现:

# 1. 如果body里有id,则是update,否则是insert
 db.table('t_good').primary('id').save(body)
 # 2. 显式调用insert / update
 db.table('t_good').primary('id').insert(body)
 db.table('t_good').primary('id').update(body)

3.2.6 创建删除方法

步骤跟前面类似,关键的脚本如下:

db.table('t_user')
         .where()
         .eq("id", id)
         .delete()

此时,需要在接口的请求参数里,添加参数

id 3 integer

执行时就会删除where id=3的记录。

如果不传,则会认为是 where id is null

以上就是一套单表的简单CRUD接口创建过程

3.3 配置条件查询API

这个环节我们解决几个常见的数据查询用法

1.分页查询

2.手写SQL语句

3.带参查询

4.动态SQL语句

5.MyBatis风格写法

3.3.1 分页查询

简单用法,将原来的语句

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

改成

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

就可以了

此时请求参数,可以增加page和size作为条件

例如输入 page=1, size=5, 都是integer类型, 则会取第1页的5行记录

此处页码从1开始,有的数据库分页是从0开始的,这里统一按照人类习惯从1开始算页数。

3.3.2 手写SQL语句

前面的例子,都是针对单个表的查询,但我们经常需要对多个表进行联查,或者写一些特定的SQL语句,可以采用以下方法:

var sql="""
     select * from t_user order by id desc
 """
 return db.select(sql)

三引号运算符,确保里面的内容无需被转义。这种写法可以完全自由发挥你的SQL书写能力。

3.3.3 查询参数使用

var sql="""
     select * from t_user where gender=#{gender} order by id
 """
 return db.select(sql)

与上个例子相比,增加了gender参数,此时从请求参数处,会接收名为gender的参数

参数有两种使用方法,#{} 和 ${},区别为:

#{}时,输出查询语句为
 select * from t_user where gender=? order by id
 ${}时,输出查询语句为
 select * from t_user where gender='男' order by id
 #采用防注入占位符方式,$采用字符拼接方式,因此在String参数时,脚本写法也不一样,以下两者是等价的,注意单引号
 select * from t_user where gender=#{gender} order by id
 select * from t_user where gender='${gender}' order by id

3.3.4 动态SQL语句

在做条件查询时,经常遇到参数不确定的情况,此时需要动态语句支持

例如:参数gender和name作为查询条件,都是可有可无的,则脚本如下:

var sql="""
     select * from t_user where 1=1 
         ?{gender!=null && gender!="", and gender=#{gender}} 
         ?{name!=null && name!="", and name like '%${name}%'} 
         order by id
 """
 return db.select(sql)

?表示这一行是一个可选条件,如果满足,则增加 and xx=? 子句,实现了一个简单的sql语句拼接

同时我们也可以看到,针对like条件,用$传参更容易操作模糊匹配

3.3.5 动态SQL语句MyBatis的方式

前一种方法,如果用不习惯,还是需要花点时间理解的。

MagicAPI提供了类似MyBatis的写法,如下:

var sql="""
     select * from t_user where 1=1 
         <if test="gender!=null and gender!=''">
             and gender=#{gender}
         </if>
         <if test="name!=null and name!=''">
             and name like '%${name}%'
         </if>
     order by id
 """
 return db.select(sql)

这种if方式,对于MyBatis或者jsp爱好者,看起来更为亲切。

3.4 接口参数控制

接口发布时,经常要对入参进行约束,包括:

1.参数必填和选填

2.入参的格式,例如手机号,身份证,长度和正则等验证

3.错误提示,如某个参数有误,给出的提示语

直接可以用MagicAPI的参数信息面板完成设置

3.4.1 参数必填、选填

勾中必填选项,则会进行入参验证,相当于写代码时自己Assert.notNull等操作

对非必填项,还可以设置默认值。注意,必填项的默认值无效,只有非必填参数没传参时,会采用默认值

3.4.2 参数类型

可以对参数类型进行选择,支持常规参数类型,以及附件格式

3.4.3 参数验证

支持表达式验证,和正则验证方式,结合表达式和验证说明配置,可以做出丰富的效果

正则验证:

参数 age
 正则写为 ^\d+$
 验证说明 age必须为数字

表达式验证

参数 mobile
 表达式写为 mobile.length() == 11
 验证说明 手机号必须是11位

这样我们就可以快速搭建好API服务了

更多示范请参考:

https://magic-api.ssssssss.org.cn/magic/web/index.html

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
85 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
1天前
|
存储 API 计算机视觉
自学记录HarmonyOS Next Image API 13:图像处理与传输的开发实践
在完成数字版权管理(DRM)项目后,我决定挑战HarmonyOS Next的图像处理功能,学习Image API和SendableImage API。这两个API支持图像加载、编辑、存储及跨设备发送共享。我计划开发一个简单的图像编辑与发送工具,实现图像裁剪、缩放及跨设备共享功能。通过研究,我深刻体会到HarmonyOS的强大设计,未来这些功能可应用于照片编辑、媒体共享等场景。如果你对图像处理感兴趣,不妨一起探索更多高级特性,共同进步。
29 11
|
2天前
|
供应链 搜索推荐 API
1688榜单商品详细信息API接口的开发、应用与收益
1688作为全球知名的B2B电商平台,为企业提供丰富的商品信息和交易机会。为满足企业对数据的需求,1688开发了榜单商品详细信息API接口,帮助企业批量获取商品详情,应用于信息采集、校验、同步与数据分析等领域,提升运营效率、优化库存管理、精准推荐、制定市场策略、降低采购成本并提高客户满意度。该接口通过HTTP请求调用,支持多种应用场景,助力企业在电商领域实现可持续发展。
33 4
|
1天前
|
监控 搜索推荐 API
京东按图搜索京东商品(拍立淘)API接口的开发、应用与收益
京东通过开放商品详情API接口,尤其是按图搜索(拍立淘)API,为开发者、企业和商家提供了创新空间和数据支持。该API基于图像识别技术,允许用户上传图片搜索相似商品,提升购物体验和平台竞争力。开发流程包括注册账号、获取密钥、准备图片、调用API并解析结果。应用场景涵盖电商平台优化、竞品分析、个性化推荐等,为企业带来显著收益,如增加销售额、提高利润空间和优化用户体验。未来,随着数字化转型的深入,该API的应用前景将更加广阔。
23 1
|
5天前
|
存储 搜索推荐 API
小红书笔记详情API接口的开发、应用与收益
小红书笔记详情API接口为开发者、企业和内容创作者提供了获取平台丰富资源的通道。通过该接口,用户可以提取笔记的详细信息(如标题、正文、标签等),并应用于市场调研、竞品分析、内容创作、电商推荐等多个领域。这不仅有助于提升品牌影响力和优化用户体验,还能挖掘商业机会,促进内容创新,增强用户互动与社群凝聚力。总之,小红书笔记详情API接口为企业和个人在社交媒体领域探索新增长点提供了重要工具。
48 0
|
JavaScript Java Serverless
入门 | 云开发平台1分钟开发一个API
云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术。学习内容涵盖云开发协同、云函数、云数据库、多媒体托管、前后端一体化框架等Serverless Web开发必备知识。希望通过云开发系列课程的学习与实际操作,让大家深入了解Serverless和云开发技术,并加深对阿里云云开发平台和阿里云Serverless产品的理解与认识。 本篇内容作为入门知识,让你在一分钟之内运行起一个Java/NodeJS/Python/PHP任何一门语言的Serverless API ,让你可以在后续的课程中向API添加各种有意思的功能。
入门 | 云开发平台1分钟开发一个API
|
15天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
64 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
2天前
|
JSON 安全 API
淘宝商品详情API接口(item get pro接口概述)
淘宝商品详情API接口旨在帮助开发者获取淘宝商品的详细信息,包括商品标题、描述、价格、库存、销量、评价等。这些信息对于电商企业而言具有极高的价值,可用于商品信息展示、市场分析、价格比较等多种应用场景。
|
10天前
|
前端开发 API 数据库
Next 编写接口api
Next 编写接口api
|
16天前
|
XML JSON 缓存
阿里巴巴商品详情数据接口(alibaba.item_get) 丨阿里巴巴 API 实时接口指南
阿里巴巴商品详情数据接口(alibaba.item_get)允许商家通过API获取商品的详细信息,包括标题、描述、价格、销量、评价等。主要参数为商品ID(num_iid),支持多种返回数据格式,如json、xml等,便于开发者根据需求选择。使用前需注册并获得App Key与App Secret,注意遵守使用规范。