2026年5月20日約7分で読めます
標準ライブラリ中心で、フレームワークに依存しすぎない Go の REST API 構成。net/http と最小限の依存で保守しやすい形を考えます。
GoREST API設計
Go で API を書くとき、いきなり大きなフレームワークを入れる前に、標準ライブラリでどこまでいけるかを考えるようにしています。Go 1.22 以降の net/http はルーティングが強化され、薄い構成でも十分実用的です。
ルーティングは標準で
mux := http.NewServeMux()
mux.HandleFunc("GET /users/{id}", getUser)
mux.HandleFunc("POST /users", createUser)
http.ListenAndServe(":8080", mux)
メソッドとパスパラメータを標準でハンドリングできるようになったので、軽い API ならサードパーティのルーターは不要です。
レイヤーの分け方
役割を 3 層に分けるだけでも見通しがよくなります。
| レイヤー | 役割 |
|---|---|
| handler | HTTP の入出力・バリデーション |
| service | ビジネスロジック |
| repository | 永続化(DB アクセス) |
handler は http に依存してよいが、service から下は http を知らない、という境界を守るのがコツです。
エラーハンドリング
エラーは握りつぶさず、ラップして文脈を足します。
if err != nil {
return fmt.Errorf("ユーザー取得に失敗: %w", err)
}
まとめ
- まず標準ライブラリで組む
- レイヤー境界をはっきりさせる
- 必要になってから依存を足す
「最初から全部入り」よりも、必要に応じて積み上げるほうが Go らしく、保守もしやすいと感じています。