don't stop believing

Grouping routes 본문

Golang/Gin

Grouping routes

Tongchun 2019. 3. 4. 15:54

이번에는 route를 그룹핑하는 기능입니다.

https://github.com/gin-gonic/gin#grouping-routes


사용은 간단합니다. 하위 그룹으로 묶을 route를 Group()으로 묶으면 됩니다.

바로 예제 코드를 보면 아래와 같습니다.

package main

import (
	"github.com/gin-gonic/gin"
)

func setupRouter() *gin.Engine {
	// Disable Console Color
	// gin.DisableConsoleColor()
	r := gin.Default()

	// Simple group: v1
	v1 := r.Group("/v1")
	{
		v1.POST("/login", loginEndpoint)
		v1.POST("/submit", submitEndpoint)
		v1.POST("/read", readEndpoint)
	}

	// Simple group: v2
	v2 := r.Group("/v2")
	{
		v2.POST("/login", loginEndpoint)
		v2.POST("/submit", submitEndpoint)
		v2.POST("/read", readEndpoint)
	}

	return r
}

func loginEndpoint(c *gin.Context) {
	getPath := c.Request.URL.String()
	c.JSON(200, gin.H{
		"pathInfo": getPath,
	})
}

func submitEndpoint(c *gin.Context) {
	getPath := c.Request.URL.String()
	c.JSON(200, gin.H{
		"pathInfo": getPath,
	})
}

func readEndpoint(c *gin.Context) {
	getPath := c.Request.URL.String()
	c.JSON(200, gin.H{
		"pathInfo": getPath,
	})
}

func main() {
	r := setupRouter()

	// Listen and Server in 0.0.0.0:8080
	r.Run(":8080")
}

API를 개발할 때 버전별로 구분할 경우를 예로든 코드입니다.

v1과 v2로 구분하고 싶을때 사용할 수 있습니다.

v1 := r.Group("/v1")

{

v1.POST("/login", loginEndpoint)

v1.POST("/submit", submitEndpoint)

v1.POST("/read", readEndpoint)

}

v1과 동일한 uri인 경우 아래처럼 v2만들어 줍니다.

v2 := r.Group("/v2")

{

v2.POST("/login", loginEndpoint)

v2.POST("/submit", submitEndpoint)

v2.POST("/read", readEndpoint)

}

v1과 v2 하위 path는 동일합니다.

이제 서버를 실행하고 확인해 봅니다.

$ go run ./example/server.go 
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] POST   /v1/login                 --> main.loginEndpoint (3 handlers)
[GIN-debug] POST   /v1/submit                --> main.submitEndpoint (3 handlers)
[GIN-debug] POST   /v1/read                  --> main.readEndpoint (3 handlers)
[GIN-debug] POST   /v2/login                 --> main.loginEndpoint (3 handlers)
[GIN-debug] POST   /v2/submit                --> main.submitEndpoint (3 handlers)
[GIN-debug] POST   /v2/read                  --> main.readEndpoint (3 handlers)
[GIN-debug] Listening and serving HTTP on :8080

Post method이기 때문에 Postman을 사용해 호출해 봅니다.

먼저 v1/login을 호출해 봅니다.

이번에는 v2/login입니다.

v1과 v2로 그룹핑되서 잘 보이네요.


'Golang > Gin' 카테고리의 다른 글

mysql curd (with Gin)  (0) 2019.03.06
[swag] Gin에서 Swagger 사용하기  (0) 2019.03.04
Upload files  (0) 2019.02.27
Map as querystring or postform parameters  (0) 2019.02.27
Another example: query + post form  (0) 2019.02.15
Comments