Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A Friendly Introduction to Ktor Server
Search
Ilker Aslan
March 12, 2023
Programming
0
120
A Friendly Introduction to Ktor Server
Ilker Aslan
March 12, 2023
Tweet
Share
More Decks by Ilker Aslan
See All by Ilker Aslan
Yet Another KMP*
ilkeraslan
0
300
Other Decks in Programming
See All in Programming
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
24
12k
Cache Me If You Can
ryunen344
2
3.1k
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
770
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
基礎から学ぶ大画面対応(Learning Large-Screen Support from the Ground Up)
tomoya0x00
0
3.3k
OSS開発者という働き方
andpad
5
1.7k
楽して成果を出すためのセルフリソース管理
clipnote
0
190
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
3.3k
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
3
310
個人開発で徳島大学生60%以上の心を掴んだアプリ、そして手放した話
akidon0000
1
150
Reading Rails 1.0 Source Code
okuramasafumi
0
250
Performance for Conversion! 分散トレーシングでボトルネックを 特定せよ
inetand
0
2.4k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
Speed Design
sergeychernyshev
32
1.1k
Unsuck your backbone
ammeep
671
58k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
What's in a price? How to price your products and services
michaelherold
246
12k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Making Projects Easy
brettharned
117
6.4k
Transcript
@@export_scripts@@ A FRIENDLY INTRODUCTION TO KTOR SERVER
@@export_scripts@@ What is Ktor? Framework for micro services, web applications,
and HTTP services – Open Source, by JetBrains – Based on Kotlin Coroutines (asynchronous) –
@@export_scripts@@
@@export_scripts@@ Self Contained Package Application controls the engine settings, connection,
and SSL options – Servlet Servlet container controls the application lifecycle and connection settings –
@@export_scripts@@ Your First Server fun main() { embeddedServer( factory =
Netty, port = 8080, host = "0.0.0.0", module = Application::module ) .start(wait = true) }
@@export_scripts@@
@@export_scripts@@ Application Engine Environment Connectors that describe where and how
server should listen. – The running application – start/stop functions –
@@export_scripts@@ Application Engine Configuration Current parallelism level (e.g. the number
of available processors) – Threads used for new connections, processing connections, parsing messages –
@@export_scripts@@ Modules public actual val modules: MutableList<Application.() -> Unit> =
mutableListOf() Extension functions of an Application to structure the plugins
@@export_scripts@@ fun Application.module() { install(Resources) install(StatusPages) install(RequestValidation) configureRouting() configureSerialization() }
@@export_scripts@@ fun Application.configureRouting() { routing { indexRoute() beerRoutes() } }
@@export_scripts@@ fun Route.indexRoute() { route("/") { get { call.respondText( text
= "Welcome", status = HttpStatusCode.OK ) } } }
@@export_scripts@@
@@export_scripts@@ Routing fun Route.beerRoutes() { route("/beer") { get {...} get("{name?}")
{...} get("{id?}") {...} post {...} put("{id?}") {...} delete("{id?}") {...} } }
@@export_scripts@@ Type Safe Routing fun Route.beerRoutes() { get<resources.Beer> {...} get<resources.Beer.Id>
{...} post<resources.Beer> {...} put<resources.Beer.Id> {...} delete<resources.Beer.Id> {...} }
@@export_scripts@@ Resources @Resource("/beer") class Beer( val name: String? = null
) { @Resource("{id}") class Id(val parent: Beer = Beer(), val id: Long) }
@@export_scripts@@ Resources To define a route handler for a typed
resource, pass a resource class to a verb function (get, post, put...). – Serializable by default –
@@export_scripts@@ Build Links from Resources val link = href(Beer.Id(id =
1))
@@export_scripts@@ Get Beers curl --header "Content-Type: application/json" \ "http://0.0.0.0:8080/beer"
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@ Response Model @Serializable data class Response<T>( val data: T?
= null, val errors: List<Error>? = null )
@@export_scripts@@ Create a Beer curl --header "Content-Type: application/json" \ --data
"{"name": "Bock"}" \ "http://0.0.0.0:8080/beer"
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@ Delete a Beer curl --header \ "Content-Type: application/json" \
--request DELETE \ "http://0.0.0.0:8080/beer/532..."
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@ SSL and Certificates Ktor uses Java KeyStore (JKS) as
a storage facility for certificates. – Self-signed certificates for testing purposes by calling buildKeyStore() . –
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@ fun main() { ... embeddedServer( factory = Netty, environment
= environment ).start(wait = true) }
@@export_scripts@@ Send HTML in Response
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@ Respond with HTML Form
@@export_scripts@@
@@export_scripts@@ Templates To respond, call the respondHtmlTemplate() . – To
create a template, implement the Template interface. – Inside templates, use Placeholder or TemplatePlaceholder . –
@@export_scripts@@ Conclusions
@@export_scripts@@
@@export_scripts@@
@@export_scripts@@ The Repository
@@export_scripts@@ Where To Stalk Me https://androiddev.social/@ilker https://github.com/ilkeraslan https://www.polywork.com/ilkeraslan https://www.linkedin.com/in/aslanilker/ https://blog.ilker.it/