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


関連記事

laravel logo

LaravelのArtisanコマンドを自作する

1 はじめに2 コマンドの作成方法3 コマンドの実装3.1 文字列出力3.2 引数3.3 オプション3.4 入力を使用した対話型3.4.1 ask()メソッド3.4.2 secret()メソッド3.4 ...

rails

Rails Developer Meetup に参加してきました【1日目】

1 はじめに2 発表について2.1 安全かつ高速に進めるマイクロサービス化2.2 Rails in Microservices2.3 MySQL/InnoDB の裏側2.4 H2O/mruby でつく ...

WebアプリからLINEのメッセージを送る方法

1 はじめに2 Messaging APIとは2.1 Messaging APIの仕組み2.2 Webhookイベント2.3 メッセージオブジェクトの種類2.4 料金形態3 LINE Develope ...

[Unity]Terrain(地形)を使ってみた その2

1 はじめに2 Paint Trees3 Paint Details4 おまけ5 さいごに6 おすすめ書籍 はじめに こんにちはsuzukiです。前回に引き続きTerrainの機能を紹介していきます。 ...

Rust入門してみた (基本構文編)

1 はじめに2 Rustとは?3 Rustの特徴的な基本構文3.1 変数と定数3.2 所有権3.3 所有権の借用3.4 関数3.5 エラーハンドリング3.5.1 回復不能なエラー(panic!)3.5 ...

フォロー

blog-page_side_responsive

2020年3月
1234567
891011121314
15161718192021
22232425262728
293031  

アプリ情報

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