Diary

Diary

日々学んだことをアウトプットする場として初めてみました

ginを用いたルーティング機能

[golang] ginを用いたルーティング機能

ginを用いてサーバーを構築しチャットアプリを作成したので、その際に気をつけたルーティングやその書き方についてまとめておく

やったこと

  • Ginを用いたサーバー配信
  • Ginが静的サイトの配信とAPIサーバーとしての役割の両方を担っている
  • 一部APIのエンドポイントには、ミドルウェアかましている

注意するところ

  • ginの設定(r.Group, r.Useなど)は、上から順に実行されていく
    • つまり、書いたところより下にのみ適応される
    • grouping, middleware などがそうなっている

コード例

package main

import (
    "api/api"
    "api/db"

    "github.com/gin-contrib/static"
    "github.com/gin-gonic/gin"
)

func setupRouter() *gin.Engine {
    r := gin.New()

    // 静的ファイルのパスを指定
    r.Use(static.Serve("/", static.LocalFile("./front/dist", true)))

    // これより下のパスに対しては、全て/api/~ になる
    apiGroup := r.Group("/api")

    apiGroup.POST("/login", api.LoginCheck)
    apiGroup.POST("/users", api.RegisterNewUser)
    apiGroup.POST("/account", api.UpdateMyInfo)

    apiGroup.Use(api.LoginCheckMiddleWare())
    {
        apiGroup.GET("/users", api.GetAllUsers)
        apiGroup.POST("/logout", api.Logout)

        apiGroup.GET("/chats", api.GetAllMessages)
        apiGroup.PATCH("/chats", api.EditChat)

        apiGroup.POST("/rooms", api.CreateNewGroup)
    }

    return r
}

func main() {
    // DB の初期設定をする
    _db, err := db.DbInit()
    if err != nil {
        panic("")
    }
    defer _db.Close()

    // Gin出力設定
    gin.ForceConsoleColor()
    // setupLogOutput()

    r := setupRouter()
    r.Run(":8888")
}