🛳️
GinでREST APIを構築する
Overview
Ginとは、Golangで使うことができるフレームワークです。Echoの方が気に入ってるんですけど、こちらも人気みたいで使ってみました。
summary
それでは、環境構築とAPIサーバーをローカルで起動するところまでやってみましょう!
- プロジェクトを作成する
mkdir gin_api && cd gin_api
- モジュールを初期化する
go mod init gin_api
- Ginをインストールする
go get -u github.com/gin-gonic/gin
- 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()
}
- main.goを実行する
go run main.go
- curlでport8080にアクセスする。 -X GETを指定することで、GETリクエストを送信することができる。省略は可能。
curl http://localhost:8080 -X GET
- ダミーのデータを返したり、保存する配列を作成して、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()
}
- curlでPOSTリクエストを送信する
curl http://localhost:8080/todos -X POST -H "Content-Type: application/json" -d '{"id": 1, "text": "test"}'
- curlでGETリクエストを送信する
curl http://localhost:8080/todos -X GET
リクエストが成功するとこんな感じのログが表示されます。
thoughts
今回は、Ginで簡単なAPIサーバーを構築するのまでやってみました。今度はRDBを使うところまでやってみようかなと思います。
最近話題のrender.com
にデプロイできるようです?
無料枠もあるので、試してみてね。
Discussion