mochmoon
Backend

Go で書く軽量な REST API 設計

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 層に分けるだけでも見通しがよくなります。

レイヤー役割
handlerHTTP の入出力・バリデーション
serviceビジネスロジック
repository永続化(DB アクセス)

handler は http に依存してよいが、service から下は http を知らない、という境界を守るのがコツです。

エラーハンドリング

エラーは握りつぶさず、ラップして文脈を足します。

if err != nil {
    return fmt.Errorf("ユーザー取得に失敗: %w", err)
}

まとめ

  • まず標準ライブラリで組む
  • レイヤー境界をはっきりさせる
  • 必要になってから依存を足す

「最初から全部入り」よりも、必要に応じて積み上げるほうが Go らしく、保守もしやすいと感じています。

記事一覧へ戻る