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

Ktorコトハジメ

Takehata Naoto
November 29, 2018

 Ktorコトハジメ

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

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… 今回触れなかった機能たち