🛳️

GinでREST APIを構築する

2023/11/20に公開

Overview

Ginとは、Golangで使うことができるフレームワークです。Echoの方が気に入ってるんですけど、こちらも人気みたいで使ってみました。

https://gin-gonic.com/ja/

summary

それでは、環境構築とAPIサーバーをローカルで起動するところまでやってみましょう!

  1. プロジェクトを作成する
mkdir gin_api && cd gin_api
  1. モジュールを初期化する
go mod init gin_api
  1. Ginをインストールする
go get -u github.com/gin-gonic/gin
  1. main.goを作成する
touch main.go

Hello Worldを表示するコードを書く

package main

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

func main() {
	r := gin.Default()
	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "Hello, World!",
		})
	})
	r.Run()
}
  1. main.goを実行する
go run main.go
  1. curlでport8080にアクセスする。 -X GETを指定することで、GETリクエストを送信することができる。省略は可能。
curl http://localhost:8080 -X GET
  1. ダミーのデータを返したり、保存する配列を作成して、GET POSTに対応する
package main

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

type Todo struct {
  ID int `json:"id"`
  Text string `json:"text"`
}

var todos []Todo

func main() {
  r := gin.Default()
  r.GET("/", func(c *gin.Context) {
    c.JSON(http.StatusOK, gin.H{
      "message": "Hello, World!",
    })
  })
  r.GET("/todos", func(c *gin.Context) {
    if len(todos) == 0 {
      c.JSON(http.StatusNotFound, gin.H{"status": "Not Found"})
      return
    }
    c.JSON(http.StatusOK, todos)
  })
  r.POST("/todos", func(c *gin.Context) {
    var todo Todo
    if err := c.BindJSON(&todo); err != nil {
      c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
      return
    }
    todos = append(todos, todo)
    c.JSON(http.StatusOK, todos)
  })
  r.Run()
}
  1. curlでPOSTリクエストを送信する
curl http://localhost:8080/todos -X POST -H "Content-Type: application/json" -d '{"id": 1, "text": "test"}'
  1. curlでGETリクエストを送信する
curl http://localhost:8080/todos -X GET

リクエストが成功するとこんな感じのログが表示されます。

thoughts

今回は、Ginで簡単なAPIサーバーを構築するのまでやってみました。今度はRDBを使うところまでやってみようかなと思います。

最近話題のrender.comにデプロイできるようです?
無料枠もあるので、試してみてね。
https://render.com/docs/deploy-go-gin

Jboy王国メディア

Discussion