GinでHTTPメソッド入門
Gin初心者のためのルーティング入門
Go言語でWebアプリを構築する際に人気のフレームワーク、Ginはシンプルなルーティング機能を提供します。Ginのルーティングは r.GET、r.POST などのメソッドで定義し、URLパスとハンドラ関数を結びつけます。例えば、/hello というエンドポイントにアクセスしたときに「Hello, World!」と返すだけの簡単な例を見てみましょう。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/hello", func(c *gin.Context) {
c.String(200, "Hello, World!")
})
r.Run() // デフォルトで :8080 で起動
}
上記のコードでは r.GET を使って GET リクエストを受け取るエンドポイントを作成しています。Ginはルーティングを高速に処理し、ミドルウェアやパラメータ抽出も簡単に行えます。
HTTPメソッドとエンドポイントの使い分け
Web APIを設計する際に重要なのは、HTTPメソッド(GET, POST, PUT, DELETE など)とエンドポイントの関係です。以下に代表的な組み合わせを示します。
- GET /users - ユーザー一覧を取得
- POST /users - 新規ユーザーを作成
- GET /users/:id - 特定ユーザーの詳細を取得
- PUT /users/:id - ユーザー情報を更新
- DELETE /users/:id - ユーザーを削除
Ginでは r.GET、r.POST などを使って上記のようにメソッドごとにルーティングを定義します。エンドポイントはリソースを表すURLで、パラメータは : を使って動的に取得できます。
実践例: r.GET, r.POST, r.PUT, r.DELETE
以下に、ユーザー管理APIの簡易実装例を示します。GinのルーティングとHTTPメソッドを組み合わせて、CRUD操作を実現します。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
var users = []User{
{ID: 1, Name: "Alice"},
{ID: 2, Name: "Bob"},
}
func main() {
r := gin.Default()
// GET /users
r.GET("/users", func(c *gin.Context) {
c.JSON(http.StatusOK, users)
})
// POST /users
r.POST("/users", func(c *gin.Context) {
var newUser User
if err := c.ShouldBindJSON(&newUser); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
newUser.ID = len(users) + 1
users = append(users, newUser)
c.JSON(http.StatusCreated, newUser)
})
// GET /users/:id
r.GET("/users/:id", func(c *gin.Context) {
id := c.Param("id")
for _, u := range users {
if fmt.Sprintf("%d", u.ID) == id {
c.JSON(http.StatusOK, u)
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})
})
// PUT /users/:id
r.PUT("/users/:id", func(c *gin.Context) {
id := c.Param("id")
var updated User
if err := c.ShouldBindJSON(&updated); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
for i, u := range users {
if fmt.Sprintf("%d", u.ID) == id {
users[i].Name = updated.Name
c.JSON(http.StatusOK, users[i])
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})
})
// DELETE /users/:id
r.DELETE("/users/:id", func(c *gin.Context) {
id := c.Param("id")
for i, u := range users {
if fmt.Sprintf("%d", u.ID) == id {
users = append(users[:i], users[i+1:]...)
c.Status(http.StatusNoContent)
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "user not found"})
})
r.Run()
}
この例では、Ginの r.GET、r.POST、r.PUT、r.DELETE を使って、ユーザーリソースに対する CRUD 操作を実装しています。エンドポイントは /users と /users/:id を使い、HTTPメソッドで操作を区別しています。Gin初心者でも直感的にルーティングを定義できる点が魅力です。
コメント
コメントを投稿