作為一個後端框架,最常見的功能除了產生前端畫面以外,還有作為 API Server 生成 Json 之類的回傳內容。
今天我們來看看 Ktor 怎麼生成這個內容
根據 https://openaidoc.org/zh-Hant/ktor/server-serialization
我們可以使用 Kotlin 內建的 Map 和 List
get("/json/kotlinx-serialization") {
call.respond(mapOf("hello" to "world"))
}
另外我們可以使用 @Serializable
annotation 來標記我們想轉換的物件
這個標記搭配上 Kotlin 的 data class
非常好用
import kotlinx.serialization.Serializable
@Serializable
data class Person(val name: String, val age: Int)
fun Application.configureSerialization() {
install(ContentNegotiation) {
json()
}
routing {
get("/json/kotlinx-serialization") {
call.respond(Person("Alice", 18))
}
}
}
如果我們想支援其他的回傳格式,比方說 protobuf
我們只需要調整 install
裡面的內容就好
@Serializable
data class Person(val name: String, val age: Int)
fun Application.configureSerialization() {
install(ContentNegotiation) {
protobuf()
}
routing {
get("/json/kotlinx-serialization") {
call.respond(Person("Alice", 18))
}
}
}
這也是使用 Kotlin 作為後端開發的一個優勢
由於引入了 data class 這類型別,所以我們在定義回傳型態時,不需要特別去撰寫很多的 setter/getter,
只需要列出所有的參數,Kotlin 就自動幫我們加入對應的 setter 和 getter 了。
要更換回傳的資料格式,我們只需要更換資料的處理方式即可。
今天的部分就到這邊,我們明天見!