🙆
Golang + CleanArchitecture で作る RestAPI のボイラープレート
はじめに
GoでRestAPIを作るボイラープレートを考えてみました。
実際のコードはこちらになります。
概要
本ボイラープレートでは、TODOアプリの仕様をベースに
- ユーザーのログイン機能
- TODOの新規作成
- TODOの閲覧
の3つの機能を用意しています。
また、将来の変更が容易になるよう、CleanArchitectureの考え方を採用しています。
構成
使用している外部ライブラリ
- go-chi
- ozzo-validation
- golang-jwt/jwt/v4
go-chi
go-chiは、GoでHTTPサービスを作るための外部ライブラリです。
色々と特徴はあるのですが、以下の2点の特徴が気に入り採用しました。
- routerとmiddlewareだけのシンプルな機能
- 外部ライブラリに依存しない
ozzo-validation
ozzo-validationは、バリデーション用の外部ライブラリです。
構造体にタグをつけることなくバリデーション処理を実行できる点が気に入り採用しました。
go-lang-jwt/jwt/v4
jwt実装用の外部ライブラリです。
こちらの採用理由に関しては、特にないです。
ディレクトリ
ディレクトリ構成はStandard Go Project Layoutを参考にしています。
コードの全体的な思想は、CleanArchitectureを意識しており
- driver層では、ルーティング、DI、データアクセスの実装
- adapter層では、認証、リクエストのバリデーション、ユースケースの呼び出し
- usecase層では、ユースケースの実行
- entitiy層では、ビジネスロジックの実行
を行っています。
.
├── cmd
├── docs
│ └── openapi
└── internal
├── adapter
│ ├── authenticator
│ ├── controller
│ ├── jwt
│ ├── lib
│ └── response
├── driver
│ ├── handler
│ ├── middleware
│ ├── registry
│ └── stub
├── entity
│ ├── todo
│ └── user
└── usecase
├── createtodo
├── gettodo
└── login
リクエストの流れとしては、以下の通りです。
cmd -> driver -> adapter -> usecase -> entity
おわりに
ざっくり構成や設計についてまとめてみました。詳細はコードを参照していただけますと幸いです。
色々足りてないものもあるので、随時コードを更新していきたいと思っています。
何かの参考に立てば幸いです。それでは。
Discussion