Gin とは?
Go 言語で使える Http Web フレームワーク。
“Martini” のような API が特徴ですが、 Martini の 40 倍以上の速さがあります。
とにかく速度が要求されるのであれば、Gin がおすすめです。
特徴
速い
- Radix Tree に基づいたルーティング機構
- メモリ消費量が少ない
- リフレクションを使わない
- API 性能が予測しやすい
ミドルウェア
クライアントからのリクエストは、ミドルウェアのチェイン ( フィルタ ) を多段的に経由して、最終的にアクションによって処理されます。
ミドルウェアには以下のようなものがあります。
- ロギング
- 認証・認可
- GZIP による圧縮
クラッシュフリー
Gin は Http リクエストに対する処理中に発生した panic を捉えて、自動的に復旧します。
サーバーは特定のアクションの処理失敗によってダウンするようなことなく稼働し続けます。
例えば、 panic 発生を Sentry のようなサービスに通知できます。
JSON 検証
Gin はリクエストとして受け取った JSON のフォーマットが正しいかを検証してくれます。
フォーマットだけでなく、JSON 内の必須属性の値がセットされているかといったこともチェック可能です。
ルーティンググループ
ルーティングをグルーピングして管理できます。
- 認証必須のパス と 認証不要なパス
- API v1 バージョンのパス と API v2 バージョンのパス
グルーピングしたルーティングパスの階層に限界はなく、性能影響もありません。
エラー管理
Gin は HTTP リクエストで発生したエラーをすべて収集するための便利機能を用意してくれます。 最終的には、ミドルウェアによってエラーは以下のようなリソースに書き出されます。
- ログファイル
- データベース
- その他ネットワーク経由で外部サービス
レンダリング
JSON だけでなく、XML、HTML などにレンダリングする機能を提供します。
拡張性
リクエストチェインの実態となる「ミドルウェア」は簡単に作成できますし、サンプルコードも用意されています。
クイックスタート
前提条件
以下のものがインストールされていることが前提となります。
- Go 1.13 以上
インストール
事前に Go のプロジェクトが作成されている必要があります。
作業用ディレクトリに go.mod ファイルが無ければ、作成しておきます。
| |
準備ができたら、以下のコマンドを実行して Gin モジュールをインストールします。
| |
カレントディレクトリに main.go を作成し、最初のコードを記述します。
手っ取り早く、公開されているテンプレートコードを拝借します。
| |
"github.com/gin-gonic/gin" というパッケージがインポートされているはずです。
後はこの Go コードを実行するだけです。
| |
ブラウザでアクセスしてもいいですが、コマンドラインから curl でアクセスしてみます。
| |
レスポンスとして JSON を返却する
今度はレスポンスとして JSON を返却させてみます。
空のmain.go ファイルを作成します。
| |
main.go に以下のコードを記述します。
| |
実行します。
| |
ブラウザでアクセスしてもいいですが、コマンドラインから curl でアクセスしてみます。
| |
先ほどと少し異なり、JSON が出力されました。
ひとこと
Gin を使って本当にシンプルな Web アプリケーション ( と呼んでいいのかどうかも怪しいレベルのもの ) を作ることはできました。
次回は JWT を使った認証の仕組みを作って見たいと思います。