フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

middlewareってなに?インフラが思うミドルウェアとはちがうの?

f:id:lirlia:20210321183729p:plain

ちがいます。

インフラエンジニアが思うミドルウェアやApacheやEnvoyなどのアプリを動かすソフトのことをさしています。

しかしGoでAPIサーバを立てるときなどに用いられるMiddlewareという言葉は、HTTPリクエストを途中で処理する層のことを指しています。

イメージとしては /topにアクセスがくる→/topを生成して返却 の流れ があるとして、この間に差し込みたい処理のことをMiddlewareと呼ぶようです。

  • /topにアクセスがくる→なんらかの処理→/topを生成して返却 の流れ

Middlewareでやること

  • リクエストのHTTPヘッダを書き換え
  • リクエストへの一意キーの付与
  • ログの出力
  • 認証
  • etc

などシステム全体として管理したいような処理を行います。ドメインに依存しない話ですね。

これでBasic認証が追加できるのは驚いた・・

package main

import (
  "github.com/goji/httpauth"
  "net/http"
)

func main() {
  finalHandler := http.HandlerFunc(final)
  authHandler := httpauth.SimpleBasicAuth("username", "password")

  http.Handle("/", authHandler(finalHandler))
  http.ListenAndServe(":3000", nil)
}

func final(w http.ResponseWriter, r *http.Request) {
  w.Write([]byte("OK"))
}

参考