ミドルウェアは、HTTPリクエストのライフサイクルでメインの処理の前または後にコードを実行できる仕組みです。フレームワーク内で全てのリクエストとレスポンスをインターセプトするフックとして理解することができます。

Irisでのミドルウェアの使用

irisでは、Useメソッドを使用して、ルートにミドルウェアを登録できます。

package main

// パッケージのインポート
import "github.com/kataras/iris/v12"

func main() {
  // irisのインスタンスを定義
  app := iris.New()
  // gzip圧縮ミドルウェアの使用
  app.Use(iris.Compression)

  // ルートの設定
  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("Hello <strong>%s</strong>!", "World")
  })

  // ポートでリスニング
  app.Listen(":8080")
}

Irisでのカスタムミドルウェア

// カスタムミドルウェアの関数シグネチャ
func Logger() iris.Handler {
    // クロージャを通じてハンドラを返す
    return func(ctx iris.Context) {
        t := time.Now()

        // パラメータの設定
        ctx.Values().Set("framework", "iris")

        // リクエスト前のロジック

        ctx.Next()

        // リクエスト後のロジック
        latency := time.Since(t)
        log.Print(latency)

        // 送信されたステータスへのアクセス
        status := ctx.GetStatusCode()
        log.Println(status)
    }
}

func main() {
    app := iris.New()
    // カスタムミドルウェアの登録
    app.Use(Logger())

    app.Get("/test", func(ctx iris.Context) {
        // ミドルウェアによって設定されたパラメータの読み取り
        framework := ctx.Values().GetString("framework")

        // 出力は次のようになります: "iris"
        log.Println(framework)
    })

    app.Listen(":8080")
}