特别说明
当前博客平台账号已废弃,如果有使用细节问题请前往我新博客平台进行讨论交流。
个人博客平台 HuRuWo的技术小站
文章首发于个人博客HuRuWo的技术小站,如果本文非vip用户无法完全浏览或者图片无法打开,可前往个人博客文章地址查看文章并留言讨论。
个人博客文章地址APP接口开发的入门指南(写毕设的看看)
更多技术文章访问本人博客HuRuWo的技术小站,包括 Electron从零开发 Android 逆向 app 微信数据抓取 抖音数据抓取 闲鱼数据抓取 小红书数据抓取 其他软件爬虫 等技术文章
前言
最近闲的不行,因为距离新版本发布还有一段时间。在这段时间里,我开始着手学点新东西。我瞄上了api的开发,虽然公司有专门的接口开发人员。但是我学好了,可以自己开发东西玩也是不错的。
现在是一月份,想起一年前写管理系统的时候。被API烦的不行,因为没有写过所以请了好几顿饭才让哥们写了个bug奇多的后台。如果你也是要写app毕设的同学,希望您能看到这篇文章(看缘分)。
技术选型
- 语言:java 作为android 开发,首选 java 不解释
- 框架:这个就多了,作为最好的(不是php)后端语言之一。java的框架数不胜数,仔细对比了之后选择了blade 这个框架。主要原因如下:
1.开源 开源意味着可以查看和修改框架-->开源地址
2.活跃 不仅社区活跃,而且还在持续更新。我提问之后,能很快回答
3.文档清楚,入门简单。blade文档 如果看不懂,还有视频教程。
工具准备
AndroidStudio
VSCode
IntelliJ IDEA
GIT
SqliteStudio
谷歌浏览器+postman插件
swagger
实战部分
项目选择
api 无非就是增删改查 --crud,一个最好的实例就是 note记事本。所以这个项目就是记事本的开发。
API开发部分
1.导入必须的依赖、插件
打开IntelliJ IDEA,新建maven项目,在pom.xml
里面添加相关的东西。
<dependencies>
<!-- mvc dependency -->
<dependency>
<groupId>com.bladejava</groupId>
<artifactId>blade-mvc</artifactId>
<version>2.0.6-BETA</version>
</dependency>
<!--sqlite数据库-->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.15.1</version>
</dependency>
<dependency>
<groupId>com.bladejava</groupId>
<artifactId>blade-jdbc</artifactId>
<version>0.2.2-RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<!--打包文件夹-->
<finalName>restful</finalName>
<!--资源路径-->
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
<!--配置文件编译版本-->
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
以上直接复制即可,具体解释看注释即可。
2.来一个helloworld
新建Application.java文件,写main函数并初始化框架。
public static void main(String[] args) {
Blade.me() .start(HelloApplication.class, args);
}
运行他,默认访问端口 127.0.0.1:9000
发现啥都没有,所以添加一个数据返回:
public static void main(String[] args) {
Blade.me().get("/", (request, response) -> response.text("Hello World"))
.start(Application.class, args);
}
重启项目,这回有了。
其他端口监听,设置listen
Blade.me().listen(880).start(Application.class, args);
3.返回json格式的数据
首选我们把监听写到控制器里面去,只需要在累上加上@Path
注解即可。
@Path(value = "user")
public class UserController {
}
其中user
是访问路径,也就是访问127.0.0.1:9000/user
的时候会进入这个控制器。
@PostRoute("test")
@JSON
public RestResponse register(@Param String test) {
if(test!=null){
return RestResponse.ok(test);
}
else {
return RestResponse.fail("数据不能为空");
}
}
一个post测试接口:@PostRoute("test")
表示地址和方式,JSON表示返回数据格式:
不传数据
数据传递
4.数据库的链接
关键的地方来了,有数据库的后台才能算真正的后台。我这次选择的是sqlite数据库,特点就是不需要安装,只需要一个数据库文件。
(请确认已加入相关的依赖):
使用sqlitestudio工具新建数据库.db文件,同时添加一个表t_user
对应实体类user
把db文件放到根目录下即可,为了更方便的创建db文件。
可以使用sqlitestudio的导出功能,把数据库导出为.sql文件
创建一个SqliteJdbc.java
核心代码如下:
public static void importSql(boolean devMode) {
try {
DB_PATH = Const.CLASSPATH + File.separatorChar + DB_NAME;
DB_SRC = "jdbc:sqlite://" + DB_PATH;
if (devMode) {
DB_PATH = System.getProperty("user.dir") + "/" + DB_NAME;
DB_SRC = "jdbc:sqlite://" + DB_PATH;
}
log.info("blade dev mode: {}", devMode);
log.info("load sqlite database path [{}]", DB_PATH);
log.info("load sqlite database src [{}]", DB_SRC);
Connection con = DriverManager.getConnection(DB_SRC);
Statement statement = con.createStatement();
ResultSet rs = statement.executeQuery("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='t_options'");
int count = rs.getInt(1);
if (count == 0) {
String cp = SqliteJdbc.class.getClassLoader().getResource("").getPath();
InputStreamReader isr = new InputStreamReader(new FileInputStream(cp + "schema.sql"), "UTF-8");
/**
* 根据.sql文件写入
*/
try {
String sql = new BufferedReader(isr).lines().collect(Collectors.joining("\n"));
int r = statement.executeUpdate(sql);
log.info("initialize import database - {}", r);
}
catch (SQLiteException e){
log.info("initialize import database - {}", e.getResultCode());
}
}
rs.close();
statement.close();
con.close();
log.info("database path is: {}", DB_PATH);
} catch (Exception e) {
log.error("initialize database fail", e);
}
}
几个关键的点:
- devMode设置 加载形式 如果为真,加载db文件 如果获取失败 从 .sql 文件加载 为false 直接从sql文件加载
2.设置 db文件路径
3.记得关闭Connection
5.增删改查 操作
连接好数据库之后,就可以通过接口对数据进行操作:
在java web 里面 负责这部分操作的是控制器Controller (也就是MVC架构中的C)
新增一个NoteController.java
,文件开头添加注解
@Path(value = "note")
表示 note/ 的访问将转入这个控制器处理:
查询操作:
@GetRoute("list")
@JSON
public ARestResponse register(@Param int uid) {
try {
//fields 表示取出特定的数据
//List<Notes> list =new Notes().findAll(Fields.of("content"));
List<Notes> list = new Notes().where("uid", uid).findAll();
return ARestResponse.ok(list);
} catch (Exception e) {
return ARestResponse.fail(e.getMessage());
}
}
很容易看出来GetRoute
表示接受 get 操作 ,“list”表示访问路径。合起来就是note/list
Notes是继承了·ActiveRecord`的实体类,拥有crud能力(如果你用过郭神的数据库框架,应该不陌生).
@Table(value = "t_notes", pk = "noteid")
public class Notes extends ActiveRecord {
//注意不能用Integer
private Integer noteid;
private Integer uid;
private String content;
}
所以这样就能查询所有uid为uid的note记录
List<Notes> list = new Notes().where("uid", uid).findAll();
ARestResponse 是能返回固定json 数据的类,如果不符合你的要求可以自己写。
ARestResponse.ok:
ARestResponse.fail:
表示返回的状态:成功、失败。传入类既能输出格式化的json数据。
其他的增删改类似,不再一一列举。文档中相关操作非常清楚。
5.打包和发布
这个框架能打包成一个jar文件运行,具体操作如下:
- pom.xml 文件配置打包插件
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>package.xml</descriptor>
</descriptors>
<outputDirectory>${project.build.directory}/dist/</outputDirectory>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<!--记得修改-->
<mainClass>com.huruwo.demo.Application</mainClass>
<classpathPrefix>lib/</classpathPrefix>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<!-- 在Class-Path下添加配置文件的路径 -->
<Class-Path>resources/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
记住mainClass这个东西,一定要修改成自己的Application路径,否则jar运行起来会报 找不到Application
- 运行打包命令 maven package或者直接点击 右边
等到完成后BUILD SUCCESS
转到dist路径下的jar文件,打开命令行
java -jar xxxxx.jar
即可运行起来:
这里放一张我放在京东云的截图(xshell):
** 好了,已经可以直接访问服务器的接口了。**
我们可以配合着写一个 APP来测试接口,我已经写好了:
github 项目源码地址:Blade 搭建API服务器实例
总结
总体来说不难,blade
是一个很容易上手的框架。用来写写api/博客网站问题不大。但是我们知道,真正的app API远远不知这些。
比如还有如何使用token防止接口滥用,api 的文档如何书写,session的保存,缓存的处理等等问题。
如果是做个课设/毕设什么的,我觉得还是能应付的。