Skip to content
Server Plugin

XHttpMethodOverride

必須の依存関係: io.ktor:ktor-server-method-override

コード例: json-kotlinx-method-override

ネイティブサーバー
KtorはKotlin/Nativeをサポートしており、追加のランタイムや仮想マシンなしでサーバーを実行できます。
のサポート: ✅

[XHttpMethodOverride](https://api.ktor.io/ktor-server/ktor-server-plugins/ktor-server-method-override/io.ktor.server.plugins.methodoverride/-x-http-method-override.html) プラグインは、X-HTTP-Method-Override ヘッダー内にHTTP動詞をトンネリングする機能を提供します。 これは、サーバーAPIが複数のHTTP動詞(GETPUTPOSTDELETEなど)を処理するものの、特定の制限によりクライアントが限られた一連の動詞(例えばGETPOST)しか使用できない場合に役立つ可能性があります。 例えば、クライアントがX-Http-Method-OverrideヘッダーをDELETEに設定したリクエストを送信した場合、Ktorは、このリクエストをdelete ルートハンドラーを使用して処理します。

依存関係の追加

XHttpMethodOverrideを使用するには、ktor-server-method-override アーティファクトをビルドスクリプトに含める必要があります:

Kotlin
Groovy
XML

XHttpMethodOverride のインストール

アプリケーションにXHttpMethodOverrideプラグインをインストールするには、 指定された

モジュール
モジュールを使用すると、ルートをグループ化してアプリケーションを構造化できます。
install関数に渡します。 以下のコードスニペットは、XHttpMethodOverrideをインストールする方法を示しています...

  • ... embeddedServer関数呼び出し内。
  • ... Applicationクラスの拡張関数である、明示的に定義されたmodule内。
kotlin
kotlin

XHttpMethodOverride の設定

デフォルトでは、XHttpMethodOverrideは、リクエストを処理すべきルートを決定するためにX-Http-Method-Overrideヘッダーをチェックします。 headerNameプロパティを使用して、ヘッダー名をカスタマイズできます。

以下のHTTPリクエストは、POST動詞を使用し、X-Http-Method-OverrideヘッダーがDELETEに設定されています:

http
POST http://0.0.0.0:8080/customer/3
X-Http-Method-Override: DELETE

このようなリクエストをdelete ルートハンドラーを使用して処理するには、XHttpMethodOverrideをインストールする必要があります:

kotlin
package com.example

import io.ktor.http.*
import io.ktor.serialization.kotlinx.json.*
import io.ktor.server.application.*
import io.ktor.server.plugins.contentnegotiation.*
import io.ktor.server.plugins.methodoverride.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import kotlinx.serialization.*
import kotlinx.serialization.json.*
import io.ktor.server.util.getValue

@Serializable
data class Customer(val id: Int, val firstName: String, val lastName: String)

fun Application.main() {
    val customerStorage = mutableListOf<Customer>()
    customerStorage.addAll(
        arrayOf(
            Customer(1, "Jane", "Smith"),
            Customer(2, "John", "Smith"),
            Customer(3, "Jet", "Brains")
        )
    )

    install(XHttpMethodOverride)
    install(ContentNegotiation) {
        json(Json)
    }
    routing {
        get("/customer/{id}") {
            val id: Int by call.parameters
            val customer: Customer = customerStorage.find { it.id == id }!!
            call.respond(customer)
        }

        delete("/customer/{id}") {
            val id: Int by call.parameters
            customerStorage.removeIf { it.id == id }
            call.respondText("Customer is removed", status = HttpStatusCode.NoContent)
        }
    }
}

完全な例はこちらで確認できます: json-kotlinx-method-override