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 篇文章 | 7 人訂閱 訂閱系列文 RSS系列文 團隊Kotlin 愛台灣 2021
DAY 21

[Day 21] 使用 Coroutine SendChannel 處理非同步工作

系統除了即時接受及回應使用者請求,也需要執行各種非同步工作,例如背景排程及寄送訊息通知…等。在實作上,雖然我可以直接使用 CompletableFuture,...

2021-09-26 ‧ 由 林俊宏 分享
DAY 22

[Day 22] 實作 Database Plugin 整合 Exposed ORM, HikariCP 及 Flyway

Java Web 框架通常都至少整合一種 ORM,只要 Gradle depenency 加一下,再到設定檔填入資料庫連線設定即可。但目前 Ktor 官方尚未整...

2021-09-27 ‧ 由 林俊宏 分享
DAY 23

[Day 23] 自定義 ColumnType, Operator, Expression 擴展 Exposed Query DSL API

ORM 框架可以讓開發者專注於物件的 CRUD 操作,不必直接思考 SQL 要怎麼寫。如果是新增、修改、刪除操作的話,通常只要寫一行程式碼,呼叫 save()...

2021-09-28 ‧ 由 林俊宏 分享
DAY 24

[Day 24] 自定義 REST QueryDSL 實現動態查詢資料庫

大多數系統的資料庫查詢操作比寫入多樣化且複雜,後端工程師要花比較多的心力撰寫查詢 API,以下列出常見的幾個問題 同一張資料表的查詢 API 會隨著 Clie...

2021-09-29 ‧ 由 林俊宏 分享
DAY 25

[Day 25] 實作 Redis Plugin 整合 Redis Coroutine Client

目前 Redis 幾乎已成為後端微服務架構的必備基礎設施,但是 Ktor 官方連 ORM 都沒有整合了,Redis Client 當然也不會有啦,所以第一步就先...

2021-09-30 ‧ 由 林俊宏 分享
DAY 26

[Day 26] 實作 Ktor Session Authentication with Redis

前面我們已經學會 Ktor Authentication 機制,而且也整合了 Database 及 Redis,今天我們把這些東西都串連起來,實作支援 Mult...

2021-10-01 ‧ 由 林俊宏 分享
DAY 27

[Day 27] 實作 Redis PubSub Keyspace Notification 訂閱 Session Key Expired 事件通知

session authentication 的機制是 登入時建立 sessionId 儲存 session 資料至 Redis 驗證時使用 sessionI...

2021-10-02 ‧ 由 林俊宏 分享
DAY 28

[Day 28] 實作 Multi-Channel Notifications

鐵人賽已逐漸進入尾聲,前面二十多天,我們一步步擴充加強 Ktor 功能,也整合了 ORM, Redis 許多框架函式庫,整個系統架構及基礎設施功能已逐漸成形。今...

2021-10-03 ‧ 由 林俊宏 分享
DAY 29

[Day 29] 建立子專案來監控管理系統

前面的主題都專注於擴充加強 Ktor 及實作底層基礎設施功能,最後我們來看在 Multi-Project 架構下,要如何建立一個子專案。那麼要建立什麼子專案呢?...

2021-10-04 ‧ 由 林俊宏 分享
DAY 30

[Day 30] Ktor Q&A 與 Side Project Roadmap

終於來到鐵人賽最後一天,本來想回顧總結我實作 side project 的過程,但想到讀者應該對於 Ktor 仍有許多疑問而正在猶豫是否要採用它,所以我列出之前...

2021-10-05 ‧ 由 林俊宏 分享