Go+MysqlのREST API テンプレートを作成しました
こんにちは、HCB Advent Calendar 2021の15日目を担当する、take-2405です。
カレンダー HCB Advent Calendar 2021
今回の記事ではGo+MySQLの簡単なAPIを構築するHands-on的な記事を書こうと考えていました(過去形)
しかし、そんな内容の記事はより良い内容のものがたくさんあります。しかも、記事にしたところであまり自分の今後に生きることはないな、、と感じました。
その結果今回は「Go+MysqlのREST API テンプレートを作成しました」というタイトルでやっていきたいと思います。
テンプレート概要
今回用意したテンプレートは、ニュースアプリのような記事管理系サービスを想定したAPIになっています。
簡単なGET、POST、DockerによるDBの構築を簡単に実現できるようになっています。
注意
過去に自分で書いたコードを引用して30分ほどで作成したので、ディレクトリ構成や中身の処理などを詳しく確認できていません(今後見るかも) 。
最低限動作するという状況です。
パフォーマンスにこだわらず、最低限動けばいいやという場合にご利用ください。
テンプレート説明
それでは本題のテンプレートの中身を軽くみていきたいと思います。
以下が作成したテンプレートになります。
書かれているコードを見ながら少しずつ改変していけば、Goの開発経験が少ない人も簡単にAPIを開発できると思います。
ディレクトリ説明
. ├── Dockerfile:docker image 作成の設定を記載(基本変更不要) ├── LICENSE:ライセンスを記載(基本変更不要) ├── Makefile:コンテナを立ち上げるためのコマンドを簡略化(基本変更不要) ├── README.md:リポジトリの説明を記載(各自変更) ├── build │ └── docker-compose.yml:コンテナの設定を記載(基本変更不要、MySQL以外を使用したい場合は変更) ├── configs │ ├── config.go:DBとの接続(基本設定不要、MySQL以外を使用したい場合は変更) │ └── config_test.go:DBとの接続テスト(基本設定不要、MySQL以外を使用したい場合は変更) ├── db │ └── mysql │ ├── init │ │ └── init.sql:DBのテーブル定義などを変更(各自必要なテーブルを設定) │ └── my.cnf:(基本設定不要、MySQL以外を使用したい場合は変更) ├── docs │ └── api.md:作成したAPIの仕様を記載(各自変更) ├── go.mod ├── go.sum ├── main.go:(基本変更不要) │ 以下各自テンプレートの処理を見ながら適宜変更 └── pkg ├── controller │ ├── article.go │ ├── nice.go │ └── nice_test.go ├── model │ ├── dao │ │ ├── article.go │ │ ├── conn.go │ │ ├── nice.go │ │ └── nice_test.go │ └── dto │ ├── article.go │ └── nice.go ├── server.go ├── server_test.go └── view ├── article.go └── nice.go
アーキテクチャについて
今回採用したアーキテクチャは mvc です。 コードを改変する際に以下の責務分けを意識してみてください
- view:リクエスト&レスポンスの構造体を定義、レスポンスを返す関数を定義
- model(dao):データベースとやりとりする処理を記載
- model(dto):データベースとのやりとりためのデータを入れる構造体を定義
- controller:view&modelを繋ぐための処理を書きます。ファットコントローラーに注意!!
─── pkg ├── controller ├── model │ ├── dao │ └── dto └── view
終わりに
いかがでしたか?
Goに興味があるな という方には是非触ってみてもらいたいですね(「もっとココをわかりやすくしろ!」とコメントをいただきたいです)。
さて、明日のカレンダーは西川が書いてくれる予定なのでお楽しみに!