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


関連記事

Rust入門してみた その4 モジュール編

1 はじめに2 Rustのモジュール2.1 モジュールツリーの構築2.2 サブモジュール2.3 各モジュールの実装2.4 モジュールのプライバシー3 さいごに4 おすすめ書籍 はじめに これまでの記事 ...

BlueZとは? bluetoothctlとPythonから使用する方法を紹介!

1 はじめに2 BlueZとは?2.1 D-Busとは?3 bluetoothctlでのペアリング3.1 ペアリング4 Pythonでの実装4.1 bluezeroでのペアリング実装5 さいごに6 お ...

FastAPIのPath Operationをasync defにするときはブロッキングに気をつけよう!

1 はじめに2 Path Operationと並行処理3 挙動の確認4 対応方法4.1 asyncioを使って自力で非同期化する4.2 async対応済みのパッケージを使う4.3 async defを ...

rails

Ruby、Railsの時間に関するメソッドを使用してみた

はじめに 普段PHPのお仕事をしています、tonnyです。 半年程前からRuby on Railsの勉強を始めました。 今回はよく使う時間に関するメソッドついてまとめたいと思います。 目次 1 はじめ ...

【iOS14】App Groups を使用して WidgetKit にデータ共有

1 はじめに2 App Groupsの準備2.1 App Groupsの許可2.2 App Groupsの使い方3 WidgetKitにデータ共有4 さいごに5 おすすめ書籍 はじめに 今回はアプリ側 ...

フォロー

blog-page_side_responsive

2020年3月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

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