KTORを使用して最初のHTTP APIを書く!


導入


KTORは、さまざまなサーバー(およびクライアント側)アプリケーションを作成するために使用できるKotlinフレームワークです.
それ以上の遅延がなければ、アプリケーションを書き始めましょう.
ライクSpingboot initializer すぐに開始する必要があるすべての依存関係を持つスプリングブートプロジェクトを作成し、KTORプロジェクトジェネレータが利用可能です.
訪問Ktor Project Generator . Gradleプロジェクト、Jettyサーバー、およびKTOR 1.5.0を選択します.次に、更新されたグループ、名前、およびバージョンの要件に従って.今のところ、サーバーとクライアントのセクションから右側に何も選択しないでください.をクリックします.「アプリケーション. KT」ファイルにコードを書き始めることができるプロジェクトの基本構造を含むアーカイブを作成します.
アーカイブを展開します.IntellijアイデアまたはKotlin開発用の他のIDEでプロジェクトを開きます.今すぐ直接“アプリケーション. kt .”ファイル内のコードを書き込むにジャンプすることができます.
以下のように「アプリケーションKT」をアップデートしてください
import io.ktor.application.*
import io.ktor.response.*
import io.ktor.routing.*

fun main(args: Array<String>): Unit = io.ktor.server.jetty.EngineMain.main(args)

@Suppress("unused")
@kotlin.jvm.JvmOverloads
fun Application.module(testing: Boolean = false) {
    routing {
        get("/") {
            call.respondText("Hello, world!")
        }
    }
}
あなたの最初のAPIは現在実行する準備ができています.アプリケーションを実行するにはgradlewコマンドまたはintellijから直接実行します.(緑の三角形のアイコンは、主な機能の左側に表示されます).
ヒットHTTP://localhost:8080 ブラウザから.以下のイメージに示すように出力を見るべきです.

ディープダイブ


エンジン


主な機能の中で、我々はサーバーエンジンを指定しています.
fun main(args: Array<String>): Unit = io.ktor.server.jetty.EngineMain.main(args)
KTORサーバーアプリケーションを実行するには、まずサーバーを作成して構成する必要があります.EngineMainは、サーバーを実行するためのエンジンを表します.KTORは以下のエンジンをサポートしています.
  • ネット
  • 桟橋
  • トムキャット
  • CIO(コルーチンベースI/O)
    KTORはまた、アプリケーションロジックをテストするための特別なエンジンタイプのテストエンジンを提供します.
  • さまざまなエンジン固有のオプション、ホスト、ポート値などの異なるサーバープロパティを定義できます.

    ルーティング


    KTORアプリケーションは一つ以上のモジュールから成ります.モジュールは、サーバーのパイプラインの設定、機能のインストール、ルートの登録、リクエストの処理などを担当するアプリケーションクラスを受信しているユーザ定義関数だけです.
    上の例では、モジュールはクラスアプリケーションの拡張メソッドです.fun Application.module(testing: Boolean = false)
    ルーティングは、着信要求を扱うことができるものです.我々のケースでの“/”のような要求がなされるとき、KTORのルーティングメカニズムは我々がどのようにこの要求を送達したいかについて定義するのを許します.
    どのルートにも三つのパラメータがあります.
  • URLパターン
  • 動詞、(取得、ポスト、プット、削除、頭、オプション、またはパッチ)
  • ハンドラ-リクエストの処理へのアクセス
  • 次のように複数のルートを定義できます.
    routing {
        get("/") {
    
        }
        post("/user") {
    
        }
        get("/user/{id}") {
    
        }
    }
    

    Cover Photo by Marc Reichelt