こんにちは、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に興味があるな という方には是非触ってみてもらいたいですね(「もっとココをわかりやすくしろ!」とコメントをいただきたいです)。
さて、明日のカレンダーは西川が書いてくれる予定なのでお楽しみに!