
マイケル
みなさんこんにちは!
マイケルです!

エレキベア
こんにちクマ~~

マイケル
今回はGo言語を使用して簡単なREST APIを作ってみます!
そして最後は下記のUnityプロジェクトと実際に繋げて動作確認してみます。

【Unity】UnityWebRequestを使ってCRUD機能を実装する【Ruby on Rails】
2021-12-12

エレキベア
Go言語いいクマね~~
いろんな企業で使われるようになってきている印象クマ

マイケル
今回作ったサンプルは下記GitHubリポジトリにもあげているので、こちらもよければご参照ください!
それではさっそく見ていきましょう!
GitHub - go-book-simple-api
▲今回作成したサンプル
作成したAPIの仕様

マイケル
今回作成するAPIは、GinとGORMライブラリを使用して作成しました。
データベースはMySQLでDocker環境で構築しています。
フレームワーク無しでもいいかなと思いつつ、実装を少しでも簡略化するために選定しました。
- フレームワーク
- Gin
- ORM
- GORM
- データベース
- MySQL

エレキベア
定番の構成クマね

マイケル
テーブルとAPI定義は下記になっていて、シンプルなCRUD機能になります。
booksテーブル
Id | Name | Price |
---|---|---|
integer | string | integer |
API定義
URL | メソッド | 概要 |
---|---|---|
/books | GET | book情報取得 |
/books | POST | book情報作成 |
/books/:id | PUT | book情報更新 |
/books/:id | DELETE | book情報削除 |

エレキベア
これ以上ないくらいシンプルクマね
Docker環境の構築

マイケル
まずはDocker環境を構築します。
GoアプリのDockerfileについては、golangイメージのマニュアルをベースに作成しました。
▲GoアプリのDockerfile

エレキベア
modをダウンロードして実行するだけのシンプルな処理クマね

マイケル
そしてMySQL用のコンテナも別途用意して、docker-compose.ymlに記載して繋げます。
DBの環境変数については、Go側でも使用するため.envファイルとして用意して参照するようにしました。
▲Go、SQLコンテナの記述
▲データベース定義

マイケル
これでDocker環境の構築は完了です!

エレキベア
非常にシンプルな構成クマ
CRUD処理の実装

マイケル
ここから実際にAPIを実装します。
設計については悩みましたが、下記のような構成で実装してみました。
フォルダ名 | 概要 |
---|---|
controller | 各API処理の定義 |
model | モデル定義 |
repository | DB操作関連 |
server | サーバ関連 |

▲依存関係の図

エレキベア
最低限の分割は行っているクマね
modelの定義

マイケル
modelの定義は単純で、テーブル項目をGORMの形式で指定しています。
▲book項目の定義
repositoryの定義

マイケル
そしてrepositoryに関してはDB関連の処理を定義しています。
DB接続やマイグレーションも含めて実装しています。
▲DB接続、マイグレーション
▲book関連のDB処理

エレキベア
実際のCRUD処理もここに記述するクマね

マイケル
GORMを使用しているため、FindやSelectといった呼び出しで操作することができています。
controllerの定義

マイケル
controllerにはAPI定義を実装しています。
「/books」「/books/:id」といったURLもこちらに設定しました。
▲book関連のAPI定義

マイケル
定義したルーティングはcontroller.go内でまとめて返却しておきます。
▲ルーティング定義を返却する

エレキベア
API定義はcontroller内で完結させるクマね
ルーティングの登録

マイケル
controllerから返却したルーティングはserver.go内で登録します。
▲ルーティング定義の登録

マイケル
最後にrepositoryとserverを初期化してListenを開始すれば実装は完了です!

エレキベア
流れが掴めたクマ~~~
動作確認

マイケル
作成したAPIの動作確認を行ってみます。
一番簡単な方法はVSCodeの拡張機能であるThunderClientを使用する方法です。

▲ThunderClientによる確認

エレキベア
VSCode上で確認できるのは便利クマね

マイケル
あとは以前実装したUnityプロジェクトでも動かしてみましたが、
こちらでも問題なく動作していそうでした!

▲Unityからも問題なく接続できている

【Unity】UnityWebRequestを使ってCRUD機能を実装する【Ruby on Rails】
2021-12-12

エレキベア
これで専用のAPIサーバが作れそうクマね
おわりに

マイケル
というわけで今回はGo言語でAPIサーバを実装してみました!
どうだったかな?

エレキベア
Goはシンプルで読みやすくて中々使いやすそうだと思ったクマ〜〜

マイケル
後方互換性もあるようだから、メンテも考えるとAPIに採用するメリットは大きそうだね
今後も積極的に使っていこう!

マイケル
それでは今日はこの辺で!
アデューー!!

エレキベア
クマ〜〜〜〜〜
【Go言語】Gin、GORMでシンプルなREST APIを作成する【CRUD】~完~