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.1k
Ktorコトハジメ
2018年11月29日(木) 筋肉.ktの発表資料です。
Takehata Naoto
November 29, 2018
Tweet
Share
More Decks by Takehata Naoto
See All by Takehata Naoto
KotlinとCloud Vision APIで領収書の電子帳簿保存法対応をする / Cloud Vision API with Kotlin
n_takehata
1
77
KotlinConf 2023 現地参加レポート
n_takehata
1
240
サーバーサイドKotlinクイズ
n_takehata
0
110
サーバーサイドでのKotlin Coroutines
n_takehata
0
890
KotlessとDynamoDBで自分のツイートを収集するサーバーレスアプリケーションを作る
n_takehata
0
290
書籍『Kotlin サーバーサイドプログラミング実践開発』のこだわりとおすすめポイント
n_takehata
0
420
Server-Side Kotlinで必要なJavaの知識
n_takehata
1
410
MyBatis Dynamic SQLの Kotlinサポートを使う
n_takehata
0
770
grpc-kotlinはどこまでKotlin化できるのか?
n_takehata
0
730
Other Decks in Technology
See All in Technology
「できる!」を増やすGitHub Copilot活用法 / How to use GitHub Copilot to expand your possibilities
sansan_randd
1
240
複雑なビジネスルールに挑む:正確性と効率性を両立するfp-tsのチーム活用術 / Strike a balance between correctness and efficiency with fp-ts
kakehashi
5
3.6k
Blazor WASM × Code-first gRPC で始める C# ⼤統⼀理論
sansantech
PRO
1
850
Prisma ORMを2年運用して培ったノウハウを共有する
tockn
19
5.1k
AWS CLIの起動が重くてつらいので aws-sdk-client-go を書いた / kamakura.go#6
fujiwara3
6
3.4k
OPENLOGI Company Profile
hr01
0
46k
CockroachDB はどのくらい「しぶとい」のか? / How tough is CockroachDB?
kota2and3kan
13
4.9k
Laboratories in Science and Technology: Deep Neural Networks
keio_smilab
PRO
3
170
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
37k
大規模言語モデル (LLM)における低精度数値表現
pfn
PRO
3
840
Databricksの生成AI戦略
taka_aki
1
380
LLM評価の落とし穴~開発者目線で気をつけるポイント~
rishigami
12
3.3k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
423
63k
The Cost Of JavaScript in 2023
addyosmani
21
4k
Practical Orchestrator
shlominoach
183
9.8k
Designing Experiences People Love
moore
136
23k
Fireside Chat
paigeccino
22
2.7k
Teambox: Starting and Learning
jrom
128
8.4k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
Why Our Code Smells
bkeepers
PRO
331
56k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
8
3.5k
A Tale of Four Properties
chriscoyier
153
22k
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製フレームワーク触るの楽しい(気持ちの問題)
今後選択肢に入れていきたい
ご清聴ありがとうございました