[Day 11] Ktor 的 Routing 進階技法

隨著專案功能的增加,我們對外開放的 route 也會越來越多。

今天我們來談談怎麼調整我們的 route

route group

首先,我們可以將相關的 route 放在同一個 function 裡面,比方說:

get("/foo/bar") { … } // (1)
get("/foo/baz") { … } // (2)
get("/foo/baz/qux") { … } // (3)

改成

route("/foo") {
    get("bar") { … } // (1)
    route("baz") {
        get { … } // (2)
        get("qux") { … } // (3)
    } 
}

移動函式

隨著功能的增加,把這些邏輯都寫在 Application.kt 並不是一個好的做法,複雜度有一點提高。

不過有的讀者可能會發現,這些程式並不是常見的 OOP 架構,所以不完全適用我們熟知的重構技法。

Ktor 這個框架更多的是利用函式編程(functional programming)的方式撰寫邏輯,所以在這部分,我們要做的是將邏輯拆分到不同的函式裡面,藉此減低複雜度。

例如,我們可以把之前看過的 /html-dsl

get("/html-dsl") {
    call.respondHtml {
        body {
            h1 { +"HTML" }
            ul {
                for (n in 1..10) {
                    li { +"$n" }
                }
            }
        }
    }
}

移動到別的函式。