🕌

GO言語におけるREST APIの実施

2023/05/22に公開

はじめに

初めまして。
現在インターンで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)
}

そして以下の内容をPOSTする。

もう一度情報をGETすると、追加した情報が確認することができます。

おわりに

今回はGinのフレームワークを使用した簡単なTODOのREST APIの作成でした。
まだgRPCには本格的に触れていませんが、やはりRESTのほうが視覚的にも分かりやすい構文ですし、相手が理解しやすいという点ではとて利点を感じます。
第2弾でgRPCを利用し、Go言語の並列処理などの利点等がどのように発揮できるのか楽しみです。

以上で今回の記事は終わらせていただきます。ご清聴ありがとうございました!!!

参考文献

https://www.youtube.com/watch?v=d_L64KT3SFM&list=PLcXb41AEl1Seo1LdC0Ff84fnzKBJYwCjY

株式会社アクティブコア

Discussion