iT邦幫忙

鐵人檔案

2021 iThome 鐵人賽
回列表
Modern Web

基於 Kotlin Ktor 建構支援模組化開發的 Web 框架 系列

Ktor 是 JetBrains 以 Kotlin 語言開發的輕量級 Web 微框架,由於 Ktor 並沒有內建整合 Web 框架常具備的 DI 及 ORM,對於那些追求輕量化而不想使用 Spring Boot 全家桶的人而言,可能又覺得太過於簡化,只適合開發簡單的小型服務。在這30天中,我會先整合 DI, ORM, Redis Client,並自行實作 i18n, OpenAPI 文件產生器, RBAC for APIs 等功能來增強 Ktor,再以此為基礎,開發2個可各自獨立建構部署的子專案,包含了使用者登入驗證、訊息通知服務…等功能,示範如何使用改造後的 Ktor 來開發網站後端服務

鐵人鍊成 | 共 30 篇文章 | 9 人訂閱 訂閱系列文 RSS系列文 團隊Kotlin 愛台灣 2021
DAY 1

[Day 1] 微解封 微服務 那你有聽過微框架嗎? 又為何我選擇 Ktor?

自從微解封之後,現在「微XX」已經成為流行語,原來 Web 後端流行的「微服務」架構已經超前部署好幾年了(誤!)。相對於微服務熟為人知,「微框架」這個詞就沒這麼...

2021-09-06 ‧ 由 林俊宏 分享
DAY 2

[Day 2] 從單體式遷移至微服務架構,支援模組化開發的 Web 框架可以解決什麼問題?

近年微服務架構興起,對於規模較小的開發團隊而言,一開始就拆分為多個微服務是個沉重的負擔,所以大多還是從單體式架構 monolithic 出發,往後再逐步拆分為微...

2021-09-07 ‧ 由 林俊宏 分享
DAY 3

[Day 3] 以 Ktor Module 實作模組化開發

Ktor Module Ktor Module 可以用來組織程式碼,本身僅是一個 Application 類別的 extension function,讓 se...

2021-09-08 ‧ 由 林俊宏 分享
DAY 4

[Day 4] 使用 Gradle Multi-Project Builds X Shadow Plugin X Docker Compose 建置、打包、部署

以往 Gradle 只能使用 Groovy 語言撰寫 Script,因為我對 Groovy 不熟,所以大多從 Google 尋找到解法後,再複製貼上稍作修改解決...

2021-09-09 ‧ 由 林俊宏 分享
DAY 5

[Day 5] Ktor 微框架就如同一間毛胚屋,先來列出想要整合的框架及實作的功能清單

Ktor 的架構設計及開發風格是我所喜歡的,但相對地使用 Ktor 開發也要付出代價。因為 Ktor 以 unopinionated 的原則進行設計,所以很多功...

2021-09-10 ‧ 由 林俊宏 分享
DAY 6

[Day 6] 使用 kotlinx.serialization 轉換 JSON

在 Java 的世界中,有很多種 json library 任君挑選,其中最多人使用的應該是 Jackson 及 Gson。我過往都是使用 Jackson,因為...

2021-09-11 ‧ 由 林俊宏 分享
DAY 7

[Day 7] 實作 Request Data Validation 及 Global Exception Handler

昨天提到如何使用 kotlinx.serialization 處理 request/response json data,今天進一步延伸說明如何在 deseri...

2021-09-12 ‧ 由 林俊宏 分享
DAY 8

[Day 8] 整合 Koin DI 實作 Ktor Plugin

Ktor Plugin & DSL Ktor 的架構設計是讓開發者透過實作 plugin,把 intercepting function 註冊到 req...

2021-09-13 ‧ 由 林俊宏 分享
DAY 9

[Day 9] 使用 Config4k 以 Typesafe 及 Validatable 的方式讀取 Ktor 設定檔

Web 框架提供 API 讓開發者讀取設定檔是基本的必備功能,以 Spring 框架為例,從最早只支援 XML 格式,到現在可以使用 java-based co...

2021-09-14 ‧ 由 林俊宏 分享
DAY 10

[Day 10] 實作 Ktor Graceful Shutdown

各種 Graceful Shutdown 的作法 一個穩定的服務必須要考慮當停止服務時,已經接受的 request 必須要處理完才行,否則輕則使用者會收到伺服器...

2021-09-15 ‧ 由 林俊宏 分享