美文网首页Android开发Java
APP接口开发的入门指南(写毕设的看看)

APP接口开发的入门指南(写毕设的看看)

作者: 五谷观精分道长 | 来源:发表于2018-01-21 23:53 被阅读817次

前言

最近闲的不行,因为距离新版本发布还有一段时间。在这段时间里,我开始着手学点新东西。我瞄上了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表示返回数据格式:

不传数据

image.png
数据传递
image.png

4.数据库的链接

关键的地方来了,有数据库的后台才能算真正的后台。我这次选择的是sqlite数据库,特点就是不需要安装,只需要一个数据库文件。

(请确认已加入相关的依赖):

使用sqlitestudio工具新建数据库.db文件,同时添加一个表t_user对应实体类user

把db文件放到根目录下即可,为了更方便的创建db文件。
可以使用sqlitestudio的导出功能,把数据库导出为.sql文件

image.png

创建一个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);
        }
    }

几个关键的点:

  1. 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数据。

image.png

其他的增删改类似,不再一一列举。文档中相关操作非常清楚。

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或者直接点击 右边
image.png

等到完成后BUILD SUCCESS
转到dist路径下的jar文件,打开命令行

java -jar xxxxx.jar

即可运行起来:
这里放一张我放在京东云的截图(xshell):

image.png

** 好了,已经可以直接访问服务器的接口了。**
我们可以配合着写一个 APP来测试接口,我已经写好了:

github 项目源码地址:Blade 搭建API服务器实例

总结

总体来说不难,blade是一个很容易上手的框架。用来写写api/博客网站问题不大。但是我们知道,真正的app API远远不知这些。
比如还有如何使用token防止接口滥用,api 的文档如何书写,session的保存,缓存的处理等等问题。
如果是做个课设/毕设什么的,我觉得还是能应付的。

相关文章

  • APP接口开发的入门指南(写毕设的看看)

    前言 最近闲的不行,因为距离新版本发布还有一段时间。在这段时间里,我开始着手学点新东西。我瞄上了api的开发,虽然...

  • Android 使用 ImageView、SurfaceView

    打算根据 @卢俊 写的 音视频开发入门指南 写一个系列博客,这是第一篇,也是文章 音视频开发入门指南 任务列表中的...

  • 毕设 | word入门

    ctrl = 【subscript】ctrl shift =【superscript】alt = 【快速插入公式】...

  • 毕设毕设

    最近某些人又要被逼疯了。 因为一个两个字的东西,“毕设”,最近全宿舍都在每天做毕设,因为要交稿的日期将近。 每当截...

  • 2018上半年阅读计划

    毕设需要 《3ds Max从入门到精通》、《C#图解教程》、《Unity3D游戏开发》、《Unity游戏设计与实现...

  • 镜子日志2018/11/21

    今天算是有做了点正事,上午构想了毕设,但是毕设明天开始就必须完全进去状态了,看看日期也知道了,再拖下去,估计毕设质...

  • iOS 和 Android 开发的 React Native 入

    iOS 和 Android 开发的 React Native 入门指南 iOS 和 Android 开发的 Rea...

  • iOS 资源大全

    入门 Road Map iOS– 开发 iOS 应用从今天开始,苹果指南。★ Lifehacker– 我想写一个 ...

  • ios 不错的框架

    入门 Road Map iOS– 开发 iOS 应用从今天开始,苹果指南。★ Lifehacker– 我想写一个 ...

  • Moi - 天気予報

    本文是一篇面向前端的iOS开发入门指南,通过完成一个天气应用的App,来了解最基本iOS开发,请注意最终目的是自产...

网友评论

  • efb9d8421991:我按照你说的方式来 就写了个 Blade.me() .start(Application.class, args); 运行就报空指针
    java.lang.NullPointerException
    at com.blade.server.netty.NettyServer.initConfig(NettyServer.java:278)
    at com.blade.server.netty.NettyServer.start(NettyServer.java:81)
    at com.blade.Blade.lambda$start$1(Blade.java:683)
    at java.lang.Thread.run(Thread.java:745) 是我那配置问题吗
    五谷观精分道长:@逻辑混乱 我实际生产用的其实不是这个框架 这个文章应该写了很久了 如果你要写API 服务器可以试用一下GO语言的 GIN 框架
    五谷观精分道长:@逻辑混乱 我也只是试用了一下 具体的也没深入 不过搭建一个简单的API服务器应该是没问题的 仔细检查下代码吧
    只想搞钱的少年:这个框架真的好多坑啊 运行他的一直报错 我也是这样 从没接触过服务器 这个也不怎么详细都是大致滤过可以说是垃圾吧你的弄好了吗 今天被坑了一下午
  • c883300c09fe:看着有点懵,详细点就好了,每到关键步骤你就没写,要吐血
  • 我是龙俊:有时间试试看 看起来写的很有条例:+1:

本文标题:APP接口开发的入门指南(写毕设的看看)

本文链接:https://www.haomeiwen.com/subject/ejgqaxtx.html