Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ktorコトハジメ

Avatar for Takehata Naoto Takehata Naoto
November 29, 2018

 Ktorコトハジメ

2018年11月29日(木) 筋肉.ktの発表資料です。

Avatar for Takehata Naoto

Takehata Naoto

November 29, 2018
Tweet

More Decks by Takehata Naoto

Other Decks in Technology

Transcript

  1. 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とかが入る単位
  2. routing routing { get("/json") { call.respond(mapOf("status" to "OK")) } }

    call.respondでレスポンスを返却すればJsonになる
  3. Request、Response // リクエスト
 data class SampleRequest(val id: Int) // レスポンス


    data class SampleResponse(val id: Int, val name: String) ただのデータクラス(Swaggerとかで作れるやつで問題なし)
  4. routing post("/json") { val request = call.receive<SampleRequest>() val response =

    SampleResponse(request.id, "ktor") call.respond(response) } call.receive<リクエストの型>()でJSONのリクエストを受け取る
  5. install install(Authentication) { basic { validate { if (it.name ==

    "user" && it.password == "password") UserIdPrincipal("name") else null } } } ① ①Basic認証を有効化 ② ②validateブロックで認証のチェック、セッション情報のセット(UserIdPrincipalのとこ)
  6. module authenticate { get("/auth") { val user = call.authentication.principal<UserIdPrincipal>() call.respondText(user!!.name)

    } } Call.authentication.principal<Principalの型>でセッションに保持している ユーザー情報を取得できる
  7. Principal data class User(val id: Int, val name: String) :

    Principal io.ktor.auth.Principalを実装していればPrincipalとして使える
  8. •  OAuth •  Http Client •  WebSockets •  非同期通信 • 

    Autoreload •  実行可能Jar •  Logging etc… 今回触れなかった機能たち