Android开发者如何写服务端代码

1,345 阅读4分钟

前言

能解决用户需求的技术,都是好技术。作为一个程序猿,尤其是移动端程序猿,大家有没有独立开发一个产品的想法?我自己一直都有这样一个想法,因为:

  • 一个产品梦,完全按照自己的想法,独立设计开发一个应用,应该是一件有成就感的事。
  • 技术的相通性,如果你是 Android 开发者,那你肯定对 Java 非常熟悉,如果使用 Java 的 Spring 技术栈写服务端那肯定也不是什么难事,尤其是很多的技术都是相通的,比如
    • 各种框架的设计模式的使用
    • Android Jetpack Room 与 SpringBoot JPA
    • Dagger 与 Spring 中的 IoC
    • AOP 的实现,对字节码的修改,ASM、AspectJ
    • HTTP 请求的拦截与过滤
    • 跨进程间的通信方式
    • 等等
  • 对技术的好奇心,我想我们应该不仅局限于自己的一亩三分地,当然前提是要守好自己的专业阵地,然后拓宽自己的视野,前段时间和同事讨论技术的深度和广度的问题,基于第二点,有时候广度可以拓展深度。
  • 疫情期间更多的时间,在家办工省去了上下班的时间,有更多的时间做感兴趣的事情。

于是,作为一个 Android 开发者,我自己设计开发了个 App,本篇文章谈一谈我对于 Java 服务端开发的理解和实践。这是一个简单的签到类应用,主要的页面如下,顺便提一下,下面的 App 使用 Flutter 开发的。

image.png

Flutter 页面开发不是本篇文章的重点。下面给大家介绍下开发过程中我使用到的服务端技术。

架构图

image.png

通过这张图可以简单看下我所理解的 Java 服务端开发流程,首先业务代码由我们开发完成后,推送到代码仓库 gitlab(github),然后由持续集成工具 Jenkins 拉取代码进行编译打包,把打成的 Jar 或者 War 包存到服务器某个目录,最后将 Jar 或者 War 部署在 Tomcat 中运行。最后由 Nginx 进行反向代理,将请求转发的不同的服务器,如果有多个服务器的话,还可以做一个负载均衡,减轻单个服务器压力。这样前端浏览器或者移动端 App 就可以正常访问请求了。

在每一台服务器上,我们可能不同的业务跑在不同的 Tomcat 上,这样还会有不同服务之间的通信问题,可以采用 HTTP 或者消息订阅进行通信。另外也不是每次请求都会访问数据库,比如在我开发验证码验证功能的时候,就将验证码存在了 redis 中。当然在线上服务运行的过程中,我们还需要对运行情况做监控。比如 Zabbix 等工具。

开发工具

  • 开发工具:IntelliJ IDEA、Android Studio

  • MySQL客户端:MySQL Workbench

  • Redis客户端:Another Redis DeskTop Manager

  • 终端工具:iTerm2

  • Git工具:SourceTree

  • HTTP 请求工具:Postman

业务框架

.
├── README.md
├── pom.xml
├── roc-css-business
├── roc-css-data
├── roc-css-webapp-app
├── roc-css-webapp-browser
└── roc-css.iml

项目的结构如下:

  • roc-css-data 模块中是模型类,模型对应数据库中的表
  • roc-css-business 模块是业务逻辑类,大部分的逻辑都在这个模块中
  • roc-css-webapp-app 模块是移动端的 HTTP 请求入口也就是 Controller,主要做一些参数校验等逻辑

因为最熟悉的是 Java,在开发业务代码时,我选择了 Java Web 开发中最流行的 Spring Boot 框架。用到的技术包括:

  • spring-boot-starter-web:使用这个模块可以把我们的项目变成一个 web 项目
  • spring-boot-starter-security:用户验证和鉴权模块,我认为这是比较难的部分,包括对一些过滤器、拦截器的理解,以及如何统一处理业务逻辑错误和用户授权的错误
  • JWT:JSON Web Token,用于生成和验证用户 Token 和 security 配合使用
  • spring-boot-starter-data-jpa:用于数据库操作,这一部分用起来非常简单,甚至我们可以不必写 SQL 语句,但是用好不容易,尤其是如果不熟悉有问题不好查
  • spring-boot-starter-data-redis:用于操作 Redis
  • lombok:免于写各种 getter 和 setter
  • springfox-swagger2、springfox-swagger-ui:用于生成在线接口文档
  • 等等

以上依赖使用 maven 进行管理,当然也可以使用 Android 中常用的 Gradle。

服务部署

  • 服务器:腾讯云Ubuntu

总结

以上就是我在开发这个小项目的过程中用到的一些技术,可能有一些认识上的不足,如果你有更好的框架或工具选择,欢迎留言。当然还有很多的坑是在实际的开发中遇到的,后续会逐渐把代码完善并进行开发,欢迎大家持续关注 九点下班 公众号,持续分享 Android、Flutter、Java Web 等技术。

相关资源

spring-boot 官网

spring security 介绍

JWT 官网

MySQL Workbench 官网

Redis 客户端工具

iTerm2 官网

更多推荐

Nginx 入门实战

macOS使用iTerm2配置ssh连接

了解更多,请关注公众号:九点下班