ミドルウェアとは何ですか
ミドルウェア、英語の翻訳ミドルウェア、名前は、オブジェクトの真ん中に、そして誰それの真ん中に示唆するように?もともと、クライアントは、サーバ・インタフェースに直接要求することができます。
それは、このようなロギング、障害処理として、いくつかの特別な処理を行うには、インターフェイスに到達する前に、今、ミドルウェアでのお尻は、その要求を傍受することができます。これは、それジンのフレームワークは、それを使用する方法で、ミドルウェアを伝えるために、今日のですか?
ミドルウェアの使い方
我々は、すべてを見てgin
方法の意志トーンDefault
方法変数があり、engine
、そして二つの機能は、これらの2つの機能があり、ログのフレームワークとトラブルシューティングのミドルウェア。Use
Logger
Recovery
gin
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
これは、ミドルウェアの使用を呼び出すことで、非常に明確であるUse
問題は、これら2つのミドルウェアに加えて、今ある、詠唱ライン上の方法をに行くことができますUse
誰?我々は最初のミドルウェアそれを書かないでいいようにと、理解しやすいです。
ミドルウェアを書きます
シェーンを書く、製品MVPに注意を払うを行い、Nazanは、単純なループを記述し、要求インターセプト出力平也最帅
ログは、製品をお届けすることができます。
最初の公式見て、彼らが書く前Logger
とRecovery
塗装ひょうたんひしゃくのような書き方を、。
func Logger() HandlerFunc {
return LoggerWithConfig(LoggerConfig{})
}
func Recovery() HandlerFunc {
return RecoveryWithWriter(DefaultErrorWriter)
}
これは、両方の関数が返すことが判明HandlerFunc
し、我々はうまく関数を記述模倣、タイプを。
func PingYe() gin.HandlerFunc {
return func(c *gin.Context) {
c.String(200, "平也最帅")
}
}
非常に単純な、完成し、缶のmain
中の関数Use
それ。
func main() {
r := gin.Default()
r.Use(PingYe())
r.Run()
}
プロジェクト稼働して、アクセスlocalhsot:8080
データをレンダリングする素晴らしい成功を見て。
それはあまりにもシンプルですか?この混乱?私は10ああを打つことができます!?
私があなたに彼の人生のすべてを学ぶつもりだそうです。
深い読み
次
我々は2つのミドルウェアを定義した場合、フラットは、他の場所で最もハンサムで、また最もハンサムです。
func PingYe() gin.HandlerFunc {
return func(c *gin.Context) {
c.String(200, "平也最帅")
}
}
func Where() gin.HandlerFunc {
return func(c *gin.Context) {
c.String(200, "在全宇宙")
}
}
彼らはそれらをフレームに登録されたために、この時間は、我々はそれが最初の出力は以下となります推測平也最帅
再輸出在全宇宙
、右?はい、はい確かに。
func main() {
r := gin.Default()
r.Use(PingYe(), Where())
r.Run()
}
しかし、私は順序、最初の出力についてどのように為替の前提の下で登録の順序を変更しない場合は在全宇宙
、その後、出力平也最帅
それ?これは、有名な使用Next
方法を。その役割は、以下のミドルウェア、終了実行を実行してから次の論理を継続するために戻ってくることです。私は、それがああ〜ミドルウェアと呼ばれていた覚えています
func PingYe() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next()
c.String(200, "平也最帅")
}
}
アボート
もちろん、提供することに加えてNext
、方法をしかし、理論的には、検証がまだ要求をブロックしたいと考えて失敗した後、これを行うには、許可検証ミドルウェアを取得するには、すべての後に、動作を中断する権利を持つべきです。だから、Abort
それは我々が探している途中ということです。上記の例を取る、平也最帅
次の行の呼び出しAbort
方法は、Where
ミドルウェアは、力ではなくなるので、平坦も単なるハンサムです。
func PingYe() gin.HandlerFunc {
return func(c *gin.Context) {
c.String(200, "平也最帅")
c.Abort()
}
}
ローカルミドルウェア
私は話をしたミドルウェア一部を適応することができませんミドルウェアルーティングシナリオを追加する必要はありません、すべてのルートに反映されます。そこで、我々は、ローカルとしてミドルウェアを追加できるようにする能力を持っている必要があります。
ので、2つのインタフェースを定義するために来て、ミドルウェアを追加するためのインタフェースを実装ましてやknow
とunknown
その中央を結ぶために、そのレベルは、全宇宙の最もハンサムになった後認識し、2つのシーンを知らないまた、理解のレベルを表すと、作品は、しても知りません。実装は、ルーティングパラメータプラスミドルウェア十分に懸命の背面に、非常に簡単です。
r.GET("know", PingYe(), Where())
r.GET("unknown", func(c *gin.Context) {
c.String(200, "???")
})
インターフェイスのためのミドルウェアを追加することに加えて、あなたはまた、インターフェイスのセットを追加同じ呼び出すことができるUse
方法であることができます。
v1 := r.Group("v1")
v1.Use(PingYe(), Where())
{
v1.GET("/know", func(c *gin.Context) {
c.String(200, "know")
})
v1.GET("/unknown", func(c *gin.Context) {
c.String(200, "unknown")
})
}
HTTP基本認証
知られている基本認証、BasicAuth
基本認証インターフェイスを追加し、あなたがインターフェイスにアクセスするときにユーザー名とパスワードを提供します。
ブラウザのユーザーのために、ユーザーエクスペリエンスのために自動的にログインボックスポップアップし、他のシーンでは、それがあるアカウントのパスワードを入力していませんか?実際に、それはヘッダ情報を透過し、ヘッダ情報は、基本認証を表す固定形式があります。
Authorization: Basic <凭证>
ドキュメントの部分はのユーザ名とパスワードの組み合わせであるbase64
エンコーディング、両方のスプライスさコロン。しかし、ガチョウ、gin
フレームワークBaseAuth
ミドルウェアすでに準備されたすべてのもの、それはわずか数行のコードは、基本的な認証情報を解決することができますすることができます。
func main() {
r := gin.Default()
r.Use(gin.BasicAuth(gin.Accounts{
"pingye": "123",
}))
r.GET("/secrets", func(c *gin.Context) {
user := c.MustGet(gin.AuthUserKey).(string)
c.String(200, user+"已登录成功")
})
r.Run()
}
コード例の一部は、一部の学生は、次のような、理解できないことがありBasicAuth
、基本的な認証はそれのためにユーザー名とパスワードが必要ですので、我々はを活用することができるように、メソッドのパラメータgin.Accounts
アカウントのパスワードを確認する必要があると便利な構成で、gin.Accounts
それがマップタイプで、ユーザーのキーを代表します名前は、パスワード値は表して、もちろん、あなたが複数のキーと値のペアを設定することができ、あなたの好みに基づいて独自に設定します。
コードも登場しc.MustGet
た方法を、このメソッドの役割は、我々は、パラメータを取得しなければならないということである、いずれかを取得していないpanic
、それが何であるかを取るために、?つまりgin.AuthUserKey
、公式の説明は、ユーザーの中に基本認証資格情報であるcookie
名前。
// AuthUserKey is the cookie name for user credential in basic auth.
const AuthUserKey = "user"
オープンソース言語ライブラリプロジェクト「の一例で行くgolang-例」へようこそ〜星を
https://github.com/pingyeaa/golang-examples
その記事は、公開番号「レベルでもある」ゴー言語や技術的な原則を中心に、あなたに、歓迎の注意を支援する場合は、見ていただきありがとうございます。