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
91
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
260
Other Decks in Programming
See All in Programming
Anthropic Cookbook のおすすめレシピ
schroneko
7
1.1k
禅の心を手に入れよ
eltociear
1
280
Hanami and htmx
bkuhlmann
0
220
What We Can Learn From OSS
inouehi
0
430
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
490
サイコロで理解する統計的仮説検定の考え方
tatamiya
4
1k
Going beyond Apache Parquet's default settings
xhochy
0
120
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
680
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
560
Milestoner
bkuhlmann
1
410
Domain-Driven Transformation
hschwentner
2
1.5k
Tailwind CSSを本気でカスタマイズする方法
fsubal
14
5.4k
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
133
6.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
Music & Morning Musume
bryan
41
5.6k
Producing Creativity
orderedlist
PRO
338
39k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
What the flash - Photography Introduction
edds
64
11k
Thoughts on Productivity
jonyablonski
59
3.9k
Unsuck your backbone
ammeep
663
57k
GitHub's CSS Performance
jonrohan
1025
450k
How to train your dragon (web standard)
notwaldorf
74
5.2k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
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/