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
Ktorコトハジメ
Search
Takehata Naoto
November 29, 2018
Technology
0
1.2k
Ktorコトハジメ
2018年11月29日(木) 筋肉.ktの発表資料です。
Takehata Naoto
November 29, 2018
Tweet
Share
More Decks by Takehata Naoto
See All by Takehata Naoto
「2024年版 Kotlin サーバーサイドプログラミング実践開発」の補講 〜O/Rマッパー編〜
n_takehata
2
550
2024年版 Kotlin サーバーサイドプログラミング実践開発
n_takehata
6
4.6k
Server-Side目線で見る、Kotlin Festの楽しみ方
n_takehata
0
380
KotlinとCloud Vision APIで領収書の電子帳簿保存法対応をする
n_takehata
1
680
KotlinConf 2023 現地参加レポート
n_takehata
1
320
サーバーサイドKotlinクイズ
n_takehata
0
180
サーバーサイドでのKotlin Coroutines
n_takehata
0
1.1k
KotlessとDynamoDBで自分のツイートを収集するサーバーレスアプリケーションを作る
n_takehata
0
380
書籍『Kotlin サーバーサイドプログラミング実践開発』のこだわりとおすすめポイント
n_takehata
0
520
Other Decks in Technology
See All in Technology
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!座学①
siyuanzh09
0
110
OPENLOGI Company Profile for engineer
hr01
1
18k
月間60万ユーザーを抱える 個人開発サービス「Walica」の 技術スタック変遷
miyachin
1
130
WantedlyでのKotlin Multiplatformの導入と課題 / Kotlin Multiplatform Implementation and Challenges at Wantedly
kubode
0
240
EMConf JP の楽しみ方 / How to enjoy EMConf JP
pauli
2
150
あなたの知らないクラフトビールの世界
miura55
0
120
Building Scalable Backend Services with Firebase
wisdommatt
0
110
AWS re:Invent 2024 recap in 20min / JAWSUG 千葉 2025.1.14
shimy
1
100
[IBM TechXchange Dojo]Watson Discoveryとwatsonx.aiでRAGを実現!事例のご紹介+座学②
siyuanzh09
0
110
新しいスケーリング則と学習理論
taiji_suzuki
10
3.8k
デジタルアイデンティティ人材育成推進ワーキンググループ 翻訳サブワーキンググループ 活動報告 / 20250114-OIDF-J-EduWG-TranslationSWG
oidfj
0
450
SpiderPlus & Co. エンジニア向け会社紹介資料
spiderplus_cb
0
860
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
Designing for Performance
lara
604
68k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Into the Great Unknown - MozCon
thekraken
34
1.6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
3
170
Facilitating Awesome Meetings
lara
51
6.2k
Fireside Chat
paigeccino
34
3.1k
Unsuck your backbone
ammeep
669
57k
Raft: Consensus for Rubyists
vanstee
137
6.7k
Transcript
Ktorコトハジメ 2018年11月29日 筋肉.kt 竹端 尚人
自己紹介
概要 氏名:竹端 尚人 Twitter:@n_takehata 株式会社アプリボット所属 ・サーバーサイドKotlin ・スマートフォンゲーム開発 ・エンジニアは11年ほど ・元公務員
筋肉について • 週2でランニング(水曜日は帰宅ラン) • 女の子には「いい体」とよく言われる
アジェンダ 1.Ktorとは? 2.REST APIを作ってみる 3.認証を入れてみる 4.その他のできること 5.まとめと感想
1.Ktorとは?
Kotlin製のWeb?フレームワーク 先日バージョン1.0がリリース
今週も話題に Kotlin用フレームワーク「Ktor 1.0」正式リリース。 非同期処理に対応したWebサーバとマルチプ ラットフォームなクライアントの開発に対応 https://www.publickey1.jp/blog/18/ kotlinktor_10web.html
特徴 ・非同期処理を容易に実装できる ・Netty、Jetty、Tomcatなどのサーブレットエンジ ンに対応 ・JSONシリアライゼーション、ユーザ認証をはじ めとした様々な標準機能を搭載 ・「ケイター」と読む
人の名前みたい けいた
サーバーサイドKotlinのフレームワークといえば • 現状はSpringほぼ一択 • Javaでのシェアが圧倒的に高い上、フレームワーク側もKotlin 対応を始めている • 多機能ですごくいいフレームワーク
でもKotlin製使いたい
ということでKtor触ってみました
2.REST APIを作ってみる
手順はブログに書いてるので参考にしてください Ktorはどう使う? https://www.takehata-engineer.com/entry/how-about-using-ktor
最初のAPI
IntelliJ IDEAのKtorプラグインが楽 Ktorプロジェクトを作ればGradleの設定とか諸々やってくれる
Hello World! fun main(args: Array<String>): Unit = io.ktor.server.netty.EngineMain.main(args) fun Application.module()
{ routing { get("/") { call.respondText("Hello World!") } } } ①メイン関数でNettyサーバーの起動 ① ② ③ ③routingブロックでルーティングしていわゆるController的な処理を書く ②Application.module()が実行されるAPIとかが入る単位
JSONを使う
gradleへの設定追加 dependencies { compile "io.ktor:ktor-jackson:$ktor_version" } KtorのJacksonモジュールの依存関係を追加
install install(ContentNegotiation) { jackson { // ここに設定を書ける } } installブロックで追加するKtorモジュールや設定を記述する
routing routing { get("/json") { call.respond(mapOf("status" to "OK")) } }
call.respondでレスポンスを返却すればJsonになる
• 使いたい機能に応じてinstallブロックを書き、設定を記述する • 機能を使いたい時は、gradleへの依存関係の追加、installで設定等を 追加するのが基本
APIの実装
Request、Response // リクエスト data class SampleRequest(val id: Int) // レスポンス
data class SampleResponse(val id: Int, val name: String) ただのデータクラス(Swaggerとかで作れるやつで問題なし)
routing post("/json") { val request = call.receive<SampleRequest>() val response =
SampleResponse(request.id, "ktor") call.respond(response) } call.receive<リクエストの型>()でJSONのリクエストを受け取る
これだけ
3.認証を入れてみる
Basic認証の実装
install install(Authentication) { basic { validate { if (it.name ==
"user" && it.password == "password") UserIdPrincipal("name") else null } } } ① ①Basic認証を有効化 ② ②validateブロックで認証のチェック、セッション情報のセット(UserIdPrincipalのとこ)
routing authenticate { get("/auth") { call.respondText("Authenticated!!") } } authenticateブロックで囲われたAPIにアクセスすると、Basic認証が走る
セッション情報の利用
module authenticate { get("/auth") { val user = call.authentication.principal<UserIdPrincipal>() call.respondText(user!!.name)
} } Call.authentication.principal<Principalの型>でセッションに保持している ユーザー情報を取得できる
Principal data class User(val id: Int, val name: String) :
Principal io.ktor.auth.Principalを実装していればPrincipalとして使える
4.その他のできること
• OAuth • Http Client • WebSockets • 非同期通信 •
Autoreload • 実行可能Jar • Logging etc… 今回触れなかった機能たち
とりあえず色々できる
5.まとめと感想
• 導入は割と簡単 • 動作が軽量 • 標準機能だけでWebサービス作れそうなくらいの機能はある • Kotlin製フレームワーク触るの楽しい(気持ちの問題)
今後選択肢に入れていきたい
ご清聴ありがとうございました