转载

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

前言

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

  • 一个产品梦 ,完全按照自己的想法,独立设计开发一个应用,应该是一件有成就感的事。
  • 技术的相通性,如果你是 Android 开发者,那你肯定对 Java 非常熟悉,如果使用 Java 的 Spring 技术栈写服务端那肯定也不是什么难事,尤其是很多的技术都是相通的,比如

    • 各种框架的设计模式的使用
    • Android Jetpack Room 与 SpringBoot JPA
    • Dagger 与 Spring 中的 IoC
    • AOP 的实现,对字节码的修改,ASM、AspectJ
    • HTTP 请求的拦截与过滤
    • 跨进程间的通信方式
    • 等等
  • 对技术的好奇心 ,我想我们应该不仅局限于自己的一亩三分地,当然前提是要守好自己的专业阵地,然后拓宽自己的视野,前段时间和同事讨论技术的深度和广度的问题,基于第二点,有时候广度可以拓展深度。
  • 疫情期间更多的时间 ,在家办工省去了上下班的时间,有更多的时间做感兴趣的事情。

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

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

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

架构图

<img src="https://user-gold-cdn.xitu.io/2020/3/12/170cf53fda4ed9ba?w=1942&h=2982&f=png&s=247789" alt="image.png" style="zoom: 150%;" />

通过这张图可以简单看下我所理解的 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 等技术。

原文  https://segmentfault.com/a/1190000022001268
正文到此结束
Loading...