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
Fundamentals of Software Engineering In the Age of AI
therealdanvega
2
290
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
310
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
420
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
OTP を自動で入力する裏技
megabitsenmzq
0
130
Understanding Apache Lucene - More than just full-text search
spinscale
0
140
How to stabilize UI tests using XCTest
akkeylab
0
140
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.2k
Rethinking API Platform Filters
vinceamstoutz
0
910
Rで始めるML・LLM活用入門
wakamatsu_takumu
0
210
Codex の「自走力」を高める
yorifuji
0
1.3k
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
4
2k
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
2
290
So, you think you're a good person
axbom
PRO
2
2k
Building an army of robots
kneath
306
46k
Unsuck your backbone
ammeep
672
58k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Testing 201, or: Great Expectations
jmmastey
46
8.1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
79
Marketing to machines
jonoalderson
1
5.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
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/