17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoでAPIを作る際の技術選定

Last updated at Posted at 2022-03-11

概要

GoでAPIを作ることになったので、ライブラリやアーキテクチャの検討をした際のメモ

Web framework

:star: Gin

標準ライブラリのnet/httpでもよかったけど、フレームワークを使って楽できるところはしたかった
その他にもechochiなど選択肢は豊富だが、2022/03時点でGinが最も人気が高そうで、触ってみて問題なさそうだったので

API specification

:star: swag

コード内のコメントからSwaggerドキュメントが生成でき、Swagger UIも使えて便利
複数のフレームワークをサポートしてる
こんな感じでドキュメントを生成できる

$ swag init -g main.go

Kubernetes client

:star: client-go

Kubernetesのリソースを操作する要件があったため(これ以外に選択肢ないはず)

Logging

標準のlogを使用
必要があればzapを検討しようと思う

追記:標準パッケージに構造化ロガーが追加された

DI

とりあえず手でfactoryを書こうと思う
しんどくなってきたらwireの導入を検討したい

Configuration

環境変数をstructに変換してくれるライブラリを使用

これも良さそう

Test

gomockの利用を検討したが、こちらの記事を参考に手作りすることにしてみた

Build tool

go buildしてdocker buildしているが、koが気になってるところ

パッケージ構成

これが果たして本当にスタンダードなのか怪しいが、他に有力な選択肢もなさそうなのでこれに倣ってみる

追記:公式でドキュメントが出た

アーキテクチャ

保守性を考慮して何らかのアーキテクチャを採用したいが、オニオン・ヘキサゴナル・クリーンアーキテクチャと色々な選択肢がある中で、あまり複雑にはしたくなかったのでシンプルそうなレイヤードアーキテクチャにしてみる

参考

17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?