Tech BackEnd

GoフレームワークGinでミドルウェアを使ってログインAPIを実装

投稿日:

はじめに

今後 Go を使用した案件をやる機会があり、現在 Go の勉強中なのですが、今回は案件でも使用するフレームワーク Gin を使用してログインAPIを実装したいと思います。Gin はメモリ利用量が少なく、 reflection を使用していないため高速で動作します。また、余計な機能がないため、学習コストが低く初心者にオススメです。

ログインAPIの作成

では早速ログインAPIを作成したいと思います。冒頭の通り今回は Gin を使用するので go get しておいてください。

このようにAPIをとても簡単に作成することができます!ただ、このままだとログイン中のセッションが不明なためそのまま使用することはできません。

ログインのセッション管理

Gin はミドルウェアによる拡張が簡単に行えるという特徴があります。そこで sessions というミドルウェアを使用してログイン中のセッション管理を行いたいと思います。
まずは sessions のインストールから行います。

それでは早速コードを書いていきます。

これでログイン中のセッション管理を行うことができるようになりました、これを簡単に実現できたミドルウェアとは何なのか見ていきたいと思います。

ミドルウェア

Gin におけるミドルウェアとは何なのか、最初のサンプルコードでは一見使用していないように見えますが Gin のデフォルトメソッドで実はミドルウェアをすでに使用しているので詳細を見てみましょう。

gin.Default()

早速 gin.Default() の中身を見てみます。

ここで Use というメソッドを使用し Logger と Recovery というミドルウェアを設定しています。この二つのミドルウェアはどのような機能を持っているか紹介します。

Logger

Default で作成した際に入っているミドルウェアになります。リクエストが来たら、下記のようなフォーマットで標準出力にログ出力します。

Recovery

こちらも同じく Default で作成した際に入っているミドルウェアになります。機能としてはパニックが起きた時にリカバーして500を返します。

このように Gin はミドルウェアを使用し機能を拡張していくことができます。
それと、ログインのセッション管理で使用した sessions をもう少し詳しく紹介したいと思います。

sessions

sessions は Gin でセッションを扱うためのミドルウェアになります。改めて使い方を紹介したいと思います、サンプルでも書きましたが、まずはインストールから行います。

使用する場合は以下の import を行います。

githubにあるシングルセッションのサンプルです。

使用方法を解説するとまず、README に従って store を作成し、以下のように与えてあげるだけで利用可能になります。

セッションを利用する各関数で session := sessions.Default(c) としてユーザに紐づく session を取得。

この session に対して上記の各種操作を行った後に session.Save() でセッションストアに反映します。

サンプルだと Get でキー hello の中身をチェックし、 Set で値を入れ Save で変更内容をセッションに保存してます。

独自ミドルウェアの実装

すでに用意されているミドルウェアも便利ですが、独自ミドルウェアの実装も勿論できます。

Gin のHandlerFunc型の関数で作成することで独自のミドルウェアを作成することができます。

Gin のリクエストに対する処理は基本的に上記のようになります、 Route Handler の前後でミドルウェアが呼ばれていますが c.Next() より前の処理が最初に呼ばれ、 c.Next() より後の処理が Route Handler の後に呼ばれます。これにより共通の処理を前後にそれぞれ挟み込むことができるわけです。
独自ミドルウェアを使用する際は他のミドルウェアと同じく Use で設定してください。

さいごに

今回は Gin の簡単な使い方とほんの一部のミドルウェアの紹介でしたが、他にも JWT や CORS などのミドルウェアもありますので興味がおありの方は是非 Gin を使ってみてください。

参考

https://github.com/gin-gonic/gin

https://github.com/gin-contrib/sessions

おすすめ書籍

スターティングGo言語 (CodeZine BOOKS) Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ 改訂2版 みんなのGo言語

blog-page_footer_336




blog-page_footer_336




-Tech, BackEnd
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

rails

Railsの低レベルキャッシュを使ってみた

1 はじめに1.1 環境2 ドキュメント3 準備3.1 configの確認3.2 キャッシュストア4 使ってみる4.1 #read、#write、#delete4.2 #fetch4.3 オプション4 ...

Rust入門してみた (構造体 / トレイト)

1 はじめに2 構造体2.1 メソッド2.1.1 関連メソッド2.2 トレイト2.2.1 構造体のフィールドの1つとして、トレイトのインスタンスを持つ場合2.3 derive属性3 おすすめ書籍 はじ ...

Pythonコードが育っても品質を維持するツールを考える[Ruff Pyright]

1 はじめに2 各ツールの目的2.1 Ruff2.1.1 Pylint (参考)2.2 Pyright3 各ツールの設定 (VSCodeでの使用例)3.1 Ruff3.2 Pyright4 pre-c ...

php logo

PHPでGmail APIを利用してメールデータを取得してみる

1 はじめに2 Gmail API の有効化3 OAuthクライアントの作成4 Google Clientライブラリのインストール5 OAuth認証6 メールデータの取得7 さいごに8 おすすめ書籍 ...

【Unity】StarterAssetのThirdPersonControllerにアニメーションを追加する

1 はじめに2 Animationの追加3 Animatorの編集4 コードの修正5 さいごに6 おすすめ書籍 はじめに こんにちはsuzukiです。今回はThirdPersonControllerに ...

フォロー

blog-page_side_responsive

2020年3月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。