Go+MysqlのREST API テンプレートを作成しました

こんにちは、HCB Advent Calendar 2021の15日目を担当する、take-2405です。

カレンダー HCB Advent Calendar 2021

今回の記事ではGo+MySQLの簡単なAPIを構築するHands-on的な記事を書こうと考えていました(過去形)

しかし、そんな内容の記事はより良い内容のものがたくさんあります。しかも、記事にしたところであまり自分の今後に生きることはないな、、と感じました。

その結果今回は「Go+MysqlREST API テンプレートを作成しました」というタイトルでやっていきたいと思います。

テンプレート概要

今回用意したテンプレートは、ニュースアプリのような記事管理系サービスを想定したAPIになっています。

簡単なGET、POST、DockerによるDBの構築を簡単に実現できるようになっています。

注意

過去に自分で書いたコードを引用して30分ほどで作成したので、ディレクトリ構成や中身の処理などを詳しく確認できていません(今後見るかも) 。

最低限動作するという状況です。

パフォーマンスにこだわらず、最低限動けばいいやという場合にご利用ください。

テンプレート説明

それでは本題のテンプレートの中身を軽くみていきたいと思います。

以下が作成したテンプレートになります。

github.com

書かれているコードを見ながら少しずつ改変していけば、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に興味があるな という方には是非触ってみてもらいたいですね(「もっとココをわかりやすくしろ!」とコメントをいただきたいです)。

さて、明日のカレンダーは西川が書いてくれる予定なのでお楽しみに!