別サイトに投稿していました記事の再掲載シリーズです。
はじめに
初めまして。
現在インターンでGo言語を使用したバックエンド関係の学習をしている新米エンジニアです。
今回から第1弾と第2弾でRESTとgRPCについて学んでいきたいと思います。
第1弾の今回は基礎的な学習を一度離れ、実際に簡単なREST APIを作成しました。
第2弾では実際にgRPCとRESTを比較をしていきたいと思います。
今回解決したい課題
第2弾のgRPC編までに、私の基礎的なGo言語の学習状況から抜け出しAPI周りを学習したいというのが今回解決したい課題です
解決方法
今回は実際に簡単なTODOのAPIを制作していくことで、課題解決に取り組みました。
解説
まず今回はGo言語のフレームワークであるGinをダウンロードしていきたいと思います
go get github.com/gin-gonic/gin
次にTODOリストの構造体を作成し、それらをJSON形式に変換する流れを作ります。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
type todo struct {
ID string `json:"id"`
Item string `json:"title"`
Completed bool `json:"completed"`
}
var todos = []todo{
{ID:"1",Item:"部屋掃除",Completed: false},
{ID:"2",Item:"本を読む",Completed: false},
{ID:"3",Item:"買い物",Completed: false},
}
// jsonに変換
func getTodos(context *gin.Context){
context.IndentedJSON(http.StatusOK, todos)
}
実際にサーバーを立ち上げ、これらの情報をGETするように書きます。
func main() {
router := gin.Default()
router.GET("/todos",getTodos)
router.Run("localhost:9090")
サーバーを立ち上げpostmanで確認すると情報が取得できていることがわかります。
go run main.go
[GIN-debug] Listening and serving HTTP on localhost:9090
次に新たな情報をPOSTするための流れを作ります。
func addTodo(context *gin.Context){
var newTodo todo
if err := context.BindJSON(&newTodo); err!= nil {
return
}
todos = append(todos, newTodo)
context.IndentedJSON(http.StatusCreated, newTodo)
}
もう一度情報をGETすると、追加した情報が確認することができます。
おわりに
今回はGinのフレームワークを使用した簡単なTODOのREST APIの作成でした。
まだgRPCには本格的に触れていませんが、やはりRESTのほうが視覚的にも分かりやすい構文ですし、相手が理解しやすいという点ではとて利点を感じます。
第2弾でgRPCを利用し、Go言語の並列処理などの利点等がどのように発揮できるのか楽しみです。
以上で今回の記事は終わらせていただきます。ご清聴ありがとうございました!!!
参考文献