🙆

Golang + CleanArchitecture で作る RestAPI のボイラープレート

2022/12/04に公開

はじめに

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