「明天、明天就是假日了⋯⋯」身旁的上班族喪屍,是我老姐,在她眼睛已成死魚的情形下,眼鏡只是個裝飾品,完全是聽我聲音指揮路況。也許有點殘忍,但是所謂的個人專案是一旦熄火就別想死灰復燃,所以我還是一到家就開口問專案目標了。
「我當然想好了!問答猜謎遊戲,會員功能,最重要的是錢錢錢收入系統!」
提到錢,那雙眼睛再度恢復光明,甚至散發出幽幽的綠光。
「在你昨晚做夢的時候,我已經在免費專案管理軟體網站 Asana 開任務列表了。」耶?還以為老姐的黑眼圈是昨天熬夜打遊戲來的,原來不是啊。
我點開老姐說的網頁 https://asana.com/ ,登入去看她昨天奮戰的結果。
「問答部分大概需要十幾個 API ,會員系統沒特殊要求的話,等後面要架到雲端的時候,直接用那個雲端提供的服務吧。至於收入系統,主程式沒建起來之前,一切都是浮雲啊浮雲。」
老姐沒有否認,或者是已經沒有反駁的力氣,抬起發顫的雙手打開 Android Studio 開始建新專案。
初始畫面她平常是選空的自己寫,但這次可能是因為有鼓勵使用者發題的需求,她選了一個有浮動按鈕的模板。
專案名字用的是她昨天就想好,和 Asana 專案一樣的名字 TurtleSoup ,意思是海龜湯,來自有名的情境猜謎遊戲。Package Name 更是隨意設定,直接放個人名。剩下的都用預設,反正這裡的資訊後面都還能改。開完專案後她直接跑去睡了,獨留我一人孤零零伴隨著電腦風扇的聲音。
畢竟第一次用 Kotlin 寫 Server ,所以查了一下網路上的資料, Kotlin 後台框架有 Java 時期就在的老字號 Spring Boot 和輕便的 Ktor ,既然這次只是簡單的提供 API 服務,那就省事點選擇 Ktor ,而且是 Kotlin 開發廠商開發的,有什麼問題他們可以內部溝通溝通,應該不會有大坑。
總之先裝 Ktor Plugin 。
粗略掃過官網的 quickstart 教學 https://ktor.io/quickstart/ ,我先把 JDK 換成昨天下載的版本, DSL 模板一個也沒勾,反正如果需要的話,後面補上也行。
名字取個和老姐專案對應的湯碗,版本號等後面穩定了再改。
因為是第一個專案,要等一大堆東西下載完,程式碼才能出現正常的語法提示顏色。
為了輕便的理由選擇輸出 Json 格式,目標:
{"message", "HELLO WORLD!"}
為此在 build.gradle
檔案的 dependencies 區域加上好用的 Json Library gson。
implementation "io.ktor:ktor-gson:$ktor_version"
修改 Application.kt
裡的函式 Application.module ,啊,有 IDE 真好,有自動 import 功能。
⋯⋯好危險,剛剛一瞬間失去了意識,我打起精神重新檢查了 Application.kt
檔案:
package com.katelee
import io.ktor.application.*
import io.ktor.features.ContentNegotiation
import io.ktor.gson.gson
import io.ktor.response.*
import io.ktor.routing.get
import io.ktor.routing.routing
fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args)
@Suppress("unused") // Referenced in application.conf
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
install(ContentNegotiation) {
gson {
}
}
routing {
get("/") {
call.respond(mapOf("message" to "HELLO WORLD!"))
}
}
}
執行看看。
照下面視窗點進去 http://0.0.0.0:8080 ,一切完美,不愧是我。
好了,未免明天電腦發熱,先中止程式執行。喪屍二號前來報到!呼嚕呼嚕呼嚕⋯⋯
本次鐵人賽的作品在放進更多內容後已經成書,書名是《老姐要用Kotlin寫專案:從 Server 到 Android APP 的開發生存日記》,歡迎購買唷。https://www.tenlong.com.tw/products/9789864348978