以下の記事でGinをインストールしてGo APIの実装を始めました。ルーティングをグループ化することができるので、今日はその機能を実装してみたいと思います。
- ルーターグループ化とは
- ルーターグループ化機能の実装
- APIの確認
ルーターグループ化とは
Ginにはルーティングをグループ化する機能があります。
この機能によって、同じAPIでもルーティング毎に仕様を変更することができます。よく見かけるのは、API毎にバージョンを分ける使い方です。APIの仕様を突然変更すると、そのAPIを使って自動化しているシステムは影響を受けてしまいます。ユーザーが任意のタイミングで切り替えられるように、バージョン毎に提供することがよくあります。
ルーターグループ化機能の実装
サンプルコードを参考に、ルーターグループ化機能を実装します。
Groupメソッドを使用してv1, v2のルーテンググループを作成し、それぞれが返すmessageの値を変更します。クライアントは、Groupに指定されたURL(以下の場合は/v1,/v2)でルーティングを使い分けます。
package main import "github.com/gin-gonic/gin" func helloV1() gin.HandlerFunc { return func(c *gin.Context) { c.JSON( 200, gin.H{ "message": "hello v1", } ) } } func helloV2() gin.HandlerFunc { return func(c *gin.Context) { c.JSON( 200, gin.H{ "message": "hello v2", } ) } } func main() { r := gin.Default() v1 := r.Group("/v1") { v1.POST("/hello", helloV1() ) } v2 := r.Group("/v2") { v2.POST("/hello", helloV2() ) } r.Run() }
APIの確認
ルーティング毎にAPIの出力が変わることを確認します。
$ go run router_group.go
別ターミナルで確認すると、以下の通り/v1/helloと/v2/helloでmessageの値が変わっていることがわかります。
$ curl --request POST localhost:8080/v1/hello {"message":"hello v1"} $ curl --request POST localhost:8080/v2/hello {"message":"hello v2"}
ちなみに、GETリクエストは定義していないのでNotFoundが返ってきます。
$ curl --request GET localhost:8080/v2/hello 404 page not found
以上です。