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言語

page_footer_responsive




-Tech, BackEnd
-,

執筆者:

         

免責事項

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


comment

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

CAPTCHA


関連記事

laravel logo

Laravelの認可機能Gateを使ってみた

1 はじめに2 やる事3 Gate3.1 登録3.2 利用4 Policy5 ミドルウェアでの使用6 さいごに7 おすすめ書籍 はじめに Laravelには認可機能を簡単に実装出来るGateという機能 ...

laravel logo

LaravelのFacade(ファサード)とは? 何気なく使用していた裏側の仕組みを解説!

1 はじめに1.1 Facadeを使用しているクラス2 Facadeの仕組み3 Facadeの作成3.1 サンプルコードに必要な実装3.2 Serviceの作成3.3 Facadeクラスの作成3.4 ...

Go言語

Go言語 gocraft/workを使って常駐プロセスでジョブを処理させる

1 はじめに2 workの特徴3 workを使えるようにする3.1 Redisのインストール3.2 Go用のライブラリインストール4 Enqueue〜ジョブ実行まで4.1 Enqueue側4.2 ジョ ...

laravel logo

[Laravel] middlewareでHTTPリクエストの前後に処理を入れる

1 はじめに2 middlewareとは3 実装3.1 middleware作成3.2 コード実装4 middleware定義4.1 常に呼び出す4.2 特定のURLにアクセスした時のみ呼び出す4.3 ...

Go言語

FSMを使った状態管理をGoで実装する

1 はじめに2 FSMとは3 基本的な実装3.1 実装する状態管理の概要3.2 状態管理を実装する4 structを定義した応用的な実装5 FSMの可視化6 さいごに7 おすすめ書籍 はじめに 一般的 ...

フォロー

follow us in feedly

blog-page_side_responsive

2020年3月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

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