Android開發者如何寫服務端代碼

前言

能解決用戶需求的技術,都是好技術。作爲一個程序猿,尤其是移動端程序猿,大家有沒有獨立開發一個產品的想法?我自己一直都有這樣一個想法,因爲:

一個產品夢,完全按照自己的想法,獨立設計開發一個應用,應該是一件有成就感的事。
技術的相通性,如果你是 Android 開發者,那你肯定對 Java 非常熟悉,如果使用 Java 的 Spring 技術棧寫服務端那肯定也不是什麼難事,尤其是很多的技術都是相通的,比如
各種框架的設計模式的使用
Android Jetpack Room 與 SpringBoot JPA
Dagger 與 Spring 中的 IoC
AOP 的實現,對字節碼的修改,ASM、AspectJ
HTTP 請求的攔截與過濾
跨進程間的通信方式
等等
對技術的好奇心,我想我們應該不僅侷限於自己的一畝三分地,當然前提是要守好自己的專業陣地,然後拓寬自己的視野,前段時間和同事討論技術的深度和廣度的問題,基於第二點,有時候廣度可以拓展深度。
疫情期間更多的時間,在家辦工省去了上下班的時間,有更多的時間做感興趣的事情。
於是,作爲一個 Android 開發者,我自己設計開發了個 App,本篇文章談一談我對於 Java 服務端開發的理解和實踐。這是一個簡單的簽到類應用,主要的頁面如下,順便提一下,下面的 App 使用 Flutter 開發的。
Flutter 頁面開發不是本篇文章的重點。下面給大家介紹下開發過程中我使用到的服務端技術。

架構圖

在這裏插入圖片描述
通過這張圖可以簡單看下我所理解的 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 等技術。a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章