☑本記事の内容
- ミドルウェアについて
- ベーシック認証
- ログ出力
ミドルウェアについて
✔>ミドルウェアについての目次
- ミドルウェアとは
- 本記事での役割
ミドルウェアとは
- OSとアプリケーションの間に入って補佐をする役割のソフトウェア
- Webアプリの場合は認証やデータベース管理サーバーとの接続などを行う
本記事での役割
- 本記事ではベーシック認証、ログ出力をするために追加する
開発
✔開発の目次
- ディレクトリ構成
- ベーシック認証
- ログ出力
ディレクトリ構成
gin-started
├─go.mod
├─go.sum
├─main.go
├─controller
│ └─user_controller.go
├─middlewares
│ ├─basic_auth.go
│ └─logger.go
├─model
│ └─user.go
└─service
└─user_service.go
コード
- main.go
package main
import (
"gin-start/controller"
"gin-start/middlewares"
"gin-start/service"
"github.com/gin-gonic/gin"
gindump "github.com/tpkeeper/gin-dump"
)
var (
userService service.UserService = service.New()
userController controller.UserController = controller.New(userService)
)
func main() {
router := gin.New()
router.Use(gin.Recovery(), middlewares.Logger(), middlewares.BasicAuth(), gindump.Dump())
router.GET("/user", func(ctx *gin.Context) {
ctx.JSON(200, userController.FindAll())
})
router.POST("/user", func(ctx *gin.Context) {
ctx.JSON(200, userController.Save(ctx))
})
router.Run("localhost:8080")
}
解説
- gin.Default()からgin.New()に変更して、自身で作成したloggerを使用出来るようにする
- gin.Recovery()-パニックが発生した際に復帰してステータスコード500を返却せるようにする
- middlewares.Logger()-自身で作成したlogger関数
- middlewares.BasicAuth()-自身で作成したBasicAuth関数
- gindump.Dump()-Request,ResponseのHeader,Bodyを出力してくれる外部パッケージ
ベーシック認証
- Ginにある簡易的な認証ライブラリ
- ユーザー名・パスワードを設定することが出来る
コード
package middlewares
import "github.com/gin-gonic/gin"
func BasicAuth() gin.HandlerFunc {
return gin.BasicAuth(gin.Accounts{
"tanaka": "tarou",
})
}
解説
- 今回の場合ユーザー名:tanaka、パスワード:tarouを設定
ログ出力
- Ginにあるログ出力ライブラリを使用
- 今回はIP・時間・メソッド・パス・ステータスコード・反応時間を出力
package middlewares
import (
"fmt"
"time"
"github.com/gin-gonic/gin"
)
func Logger() gin.HandlerFunc {
return gin.LoggerWithFormatter(func(params gin.LogFormatterParams) string {
return fmt.Sprintf("%s - [%s] %s %s %d %s \n",
params.ClientIP,
params.TimeStamp.Format(time.RFC3339),
params.Method,
params.Path,
params.StatusCode,
params.Latency)
})
}
実行
✔記事内容3の目次
- POST
- GET
POST
- Talend APIを使用してPOSTする
- Add authorizationを使いヘッダーに認証情報追加


BODY
{
"id": 1,
"name": "yamada"
}
(ログ)
127.0.0.1 - [2022-12-11T17:41:07+09:00] POST /user 200 10.2352ms
GET
- Talend APIを使用してPOSTする
- Add authorizationを使いヘッダーに認証情報追
(レスポンス)
[
{
"id": 1,
"name": "yamada"
}
]
(ログ)
127.0.0.1 - [2022-12-11T17:39:46+09:00] GET /user 200 7.2435ms
まとめ
今回の記事についてまとめます。
ポイント
- ミドルウェアを使用することで認証など様々なことを行える
- Ginにはログ出力ライブラリが存在し、出力したいログを出力することが出来る