Daily Digest

每日新聞摘要

2026年03月14日

今日總結

內容會跟隨語言切換。

📝 今日焦點 在跨平台專案整合生產級 Ktor:單一 HTTP 客戶端、即時授權標頭注入、獨立刷新機制與有限重試策略。 🔧 架構設計 採用 ResponseResult 與 ErrorType 統一資料層錯誤契約,將 Ktor 例外在邊界轉譯為可分流的錯誤類型。 ✅ 測試與品質 集中化錯誤映射與日誌使倉儲方法極簡、可測且除錯一致,方便 ViewModel 與 UI 根據類型處理。 🚀 語言演進 強調 Kotlin 的 if 與 when 為表達式,可直接回傳值以寫出更簡潔且可組合的分支邏輯。

01

Setting Up Ktor the Right Way in Kotlin Multiplatform

Dev.to Kotlin 作者:Shiva Thapa 發布:03-14 14:21

在 Kotlin Multiplatform 中以正確方式設定 Ktor

第一篇介紹基礎:在 KMP 專案中正確設定 Ktor,並建構一個從第一天就能投入生產的 HttpClient。

重點摘要

將核心客戶端與插件放在 commonMain,僅引擎為平台特定
使用獨立的精簡客戶端執行安全的 token 刷新
在除錯模式才記錄詳細日誌,並設置 WebSocket ping、timeout 與重試策略

本文示範在 Kotlin Multiplatform 中建立可投入生產的 Ktor 設定:將 ktor-client-core 與插件置於 commonMain、在 android/ios 加入各自引擎,並透過 JsonConfig 提供寬鬆且容錯的序列化。HttpClient 工廠透過 defaultRequest 統一 base URL、內容類型與自動注入最新的 bearer token(未登入時移除 Authorization),並安裝 ContentNegotiation、WebSockets(5 秒 ping)、HttpTimeout(30 秒三類超時)、Auth(在 401 時自動透過 refreshTokens 更新 token)與 HttpRequestRetry(僅對 5xx 與超時重試)。為避免 refresh 循環,token 刷新使用獨立、無 auth 的簡化客戶端;日誌僅在除錯模式輸出,客戶端作為 singleton 注入,讓上層不需撰寫額外網路處理。

02

Bulletproof Error Handling in Kotlin Multiplatform with ResponseResult and safeRequest

Dev.to Kotlin 作者:Shiva Thapa 發布:03-14 14:26

在 Kotlin Multiplatform 中用 ResponseResult 與 safeRequest 建立強固的錯誤處理

在邊界處包裝每次網路呼叫、分類結果,並回傳結構化的 ResponseResult,讓呼叫端始終收到一致可操作的回應。

重點摘要

以 ResponseResult(Success / Error / Empty)統一所有網路回傳類型
safeRequest 擴充 HttpClient,將回應與例外集中處理
根據狀態碼與例外對應 ErrorType,並將技術細節寫入日誌、用戶顯示友善訊息

本文提出一個在資料層統一錯誤處理的做法:所有 repository 的網路呼叫都回傳 ResponseResult<T>(Success、Error 或 Empty),搭配 ErrorType 列舉(如 NETWORK、SERVER、SERIALIZATION、TIMEOUT、UNAUTHORIZED 等)讓 UI 能依類型分支。safeRequest 封裝 HttpClient 請求,handleResponse 根據 HTTP 狀態碼(含 401、402、424、429 等例外映射)解析回傳並嘗試擷取伺服器訊息,handleException 則分類 Ktor 可能拋出的序列化、網路、逾時或 HTTP 例外。所有路徑以 logAndReturnError 記錄技術細節並回傳使用者可見的錯誤訊息,使 repository 簡潔且易測試。下一篇將介紹 ViewModel 的 RequestState 與 UI 整合。

03

Kotlin Fundamentals Part 8 — If Expressions — More Than Just Conditions!

Medium Kotlin 作者:Kishor Ramani 發布:03-14 08:42

Kotlin 基礎 第八篇 — if 表達式 — 不只是條件!

在 Kotlin 中,if 是一個表達式,而不僅僅是敘述句。

重點摘要

Kotlin 的 if 是表達式,不只是控制敘述。
if 的分支會回傳值,可用於指派與回傳。
文章並引導讀者到 Medium 查閱完整說明與範例。

本文提醒讀者一個 Kotlin 的重要特色:if 在 Kotlin 中是表達式(expression),而非僅僅是控制敘述。這表示 if 的各分支會回傳值,可直接用於變數指定、函式回傳或嵌入更大運算式,使程式更精簡與具表達力。原文在 Medium 上提供進一步說明與實例,示範如何以慣用的 Kotlin 寫法善用 if 作為運算式。了解這點有助於掌握 Kotlin 相較於把 if 當作純敘述之語言的不同,以及撰寫更清晰的程式碼。

04

Kotlin Fundamentals Part 9— When Expression — Kotlin’s Powerful Switch ️

Medium Kotlin 作者:Kishor Ramani 發布:03-14 08:43

Kotlin 基礎第九篇 — when 表達式:Kotlin 的強大 switch

忘掉 switch !Kotlin 的 when 比它強大十倍!

重點摘要

取代傳統的 switch 陳述式
提供更具表達力與簡潔的流程控制
促進更符合 Kotlin 慣用的寫法

本文介紹 Kotlin 的 when 表達式,主張它是比傳統 switch 更強大的替代方案。文章指出 when 能將分支邏輯整合為單一、可讀性高的結構,並強調其在表達力與簡潔性上的優勢,能更靈活地比較值、處理多重條件並簡化控制流程。面向想學習或改進 Kotlin 程式碼的開發者,作者鼓勵採用 when 以寫出更清晰且具可維護性的程式,核心訊息是:拋棄舊有的 switch,改用更強大的 when。

05

KMP Networking in Production - Part 1: Setting Up Ktor the Right Way

Medium Kotlin 作者:Shiva Thapa 發布:03-14 11:31

KMP 生產環境網路設定(第一部):正確設定 Ktor

針對 KMP 的生產用 Ktor:包含 token 刷新、重試機制、即時驗證標頭、WebSocket 保活與除錯日誌。

重點摘要

實作 token 刷新以維持驗證狀態
設定重試策略並確保每次請求的即時驗證標頭
啟用 WebSocket 保活與除錯日誌,並以單一跨平台設定統一行為

本文說明在 Kotlin Multiplatform (KMP) 專案中,如何為生產環境正確設定 Ktor,著重實務性的網路需求。內容涵蓋 token 刷新以維持授權連線、重試策略的配置,以及確保每次請求能即時帶入更新的驗證標頭;還說明了使用 WebSocket 保活來維持持久連線與加強的除錯日誌以利生產環境偵錯。作者強調將這些功能整合到單一且跨平台的設定中,讓不同目標平台的網路行為保持一致。作為系列文章的第一篇,本文提供必要的結構與執行層面考量,為投入生產的 Ktor 網路打下概念基礎。

06

KMP Networking in Production - Part 2: Bulletproof Error Handling with ResponseResult

Medium Kotlin 作者:Shiva Thapa 發布:03-14 11:53

KMP 生產環境網路設定(二):以 ResponseResult 做穩健的錯誤處理

每次呼叫都回傳 success、error 或 empty(含型別化的 ErrorType),所有 Ktor 例外在單一邊界處理,倉儲層不需 try-catch。

重點摘要

使用 ResponseResult 回傳 success、error 或 empty
在單一邊界統一捕捉並轉譯所有 Ktor 例外
倉儲層免除 try-catch,代碼更簡潔可測試

本文介紹在 Kotlin Multiplatform(KMP)專案中,使用 ResponseResult 模式來達成穩健且一致的網路錯誤處理:每個網路呼叫回傳 success、error 或 empty,且錯誤以具名的 ErrorType 表示。所有來自 Ktor 的例外在一個集中邊界被捕捉並轉譯為 ErrorType,避免在倉儲或上層邏輯中散落 try-catch。此做法能降低樣板碼、提升可測試性與除錯效率,並在不同平台間提供一致的錯誤分類與處理方式,使共享商業邏輯只需面對單一、可預期的結果類型。