本次練功坊學習重點:
就如同標題 →使用Client串接第三方API
Ktor Http Client
這次練功場比較特別,前幾次都是在用Ktor Http Server的功能,而這次就來介紹在Ktor使用Htpp Client的部分。
因為專案設計有時候不免還是會用到一些第三方的API來做應用,例如串接臉書、Google這些第三方登入API,或是你有商城功能就要串接一些支付金流的API等等,所以今天的練習就是教我們怎麼在Ktor內來試著用HttpClient串接API了。
新建專案
已經到了第四堂課,想必各位已經駕輕就熟要怎麼建立專案了,就是老樣子選擇Ktor,Client Templating 勾選CSS DSL, Server HttpClient Engine勾選Apache HttpClient Engine,ContentNegotiation勾選Jackson,然後這次多了個選項是要勾Json serialization for HttpClient。
專案建立好就會在Application.kt看到幫我們建好HttpClient的物件了。
val client = HttpClient(Apache)
試著用String接收回傳資料
在routing get裡加入呼叫Wiki首頁,然後我們接收回傳資料,呼叫API時印在網頁上,你可以在client.get<String> 決定回傳的類型,所以會收到htmlContent會收到String類型的內容。
get("/") {
val htmlContent = client.get<String>("https://en.wikipedia.org/wiki/Main_Page")
call.respondText(htmlContent, contentType = ContentType.Text.Plain)
}
也可以一開始你就將接收的content類型設為String,最後跟上面的寫法得到的結果會是一樣。
val content: String = client.get("https://en.wikipedia.org/wiki/Main_Page")
call.respondText(content, contentType = ContentType.Text.Plain)
呼叫 http://0.0.0.0:8080的結果,就會看到如下wiki首頁變成一堆字串
試著接收data class
當我們新增專案的同時,有給我們建立一個產生Json格式的api範例。
get("/json/jackson") {
call.respond(mapOf("hello" to "world"))
}
呼叫 http://0.0.0.0:8080/json/jackson的結果如下。
這時這個範例就能暫時假裝是第三方的API,我們就能先練習自己寫好的API,來用Http Client來呼叫,然後定義一個接受這個Json格式的data class(這個也是在新建專案的時候自動幫忙產生的JasonSampleClass)。
data class JsonSampleClass(val hello: String)
然後在這之前要記得要把JsonFeature裝上,否則Ktor沒辦法幫你把Json格式轉換成你的data class(如果有照前面的步驟勾選就會自動產生了)。
val client = HttpClient(Apache) {
install(JsonFeature) {
serializer = GsonSerializer()
}
}
把剛剛String的範例改成JasonSampleClass,然後試著把jsonSampleClass.toString()印在網頁上。
get("/") {
val jsonSampleClass = client.get<JsonSampleClass>("http://0.0.0.0:8080/json/jackson")
call.respondText(jsonSampleClass.toString(), contentType = ContentType.Text.Plain)
}
呼叫 http://0.0.0.0:8080,Ktor就會把你呼叫的http://0.0.0.0:8080/json/jackson的Json內容,換成JasonSampleClass,以下就是印出的結果。
如果要試看看更多Http Client的Request功能,可以到官網自行找範例來練習唷! https://ktor.io/clients/http-client/quick-start/requests.html
以上就是Ktor練功場第四堂的內容,如果有串接過API的經驗,應該覺得寫起來很簡單吧!
歡迎各位也一起來練功場學習Ktor囉!
2020–07–26~2020–09–20相約在線上! 隔週一起來練功!