河南省怡初电子科技有限公司

17719994554

洞察全球创新互联网资讯

汇集观点

APP开发APP接口开发的入门指南

发布时间:2018-08-23 作者:APP定制开发

APP开发java 作为android 开发,首选 java 不解释

 

框架

 

这个就多了,作为最好的(不是php)后端语言之一。java的框架数不胜数,仔细对比了之后选择了blade 这个框架。主要原因如下:

 

开源

 

APP开发开源意味着可以查看和修改框架-->开源地址

 

https://github.com/lets-blade/blade

 

活跃 

 

不仅社区活跃,而且还在持续更新。我提问之后,能很快回答

 

文档清楚,入门简单

 

blade文档如果看不懂,还有视频教程。blade文档地址:

 

https://lets-blade.com/

 

工具准备

 

AndroidStudio

 

VSCode

 

IntelliJ IDEA

 

GIT

 

SqliteStudio

 

谷歌浏览器+postman插件

 

swagger

 

练手demo

 

api 无非就是增删改查 --crud,一个最好的实例就是 note记事本。所以这个项目就是记事本的开发。

 

APP开发导入必须的依赖、插件

打开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>

以上直接复制即可,具体解释看注释即可。

 

来一个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);

 

返回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表示返回数据格式。

 

不传数据

 

 

 

数据传递

 

 

 

数据库的链接

 

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

 

Ps:请确认已加入相关的依赖。

 

使用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文件加载

 

设置 db文件路径

 

记得关闭Connection

 

增删改查操作

 

连接好数据库之后,就可以通过接口对数据进行操作:

 

在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数据。

 

 

 

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

 

打包和发布

 

这个框架能打包成一个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来测试接口,我已经写好了,地址如下:

 

https://github.com/HuRuWo/LearnRESTfulApi

 

 

 

总结

 

 

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