Go言語でAPIを作りたいが、今までPHPのフルスタックフレームワークしか使ったことがないので調べた。

ほしいのは何なのか

フルスタックフレームワークしか使ったことがないのだが、今回はビュー側はReactなどを使いたいと思っているのでAPIだけ作りたい。
しかし自分がほしいものが何なのかがわかっていない。
まず "golang web api framework" でググったところ先人がまとめてくれていた記事があるので読むことにする。
Go言語Webフレームワークランキング

見たところRESTフレームワークかrouterが私の欲しいもののようだが、まだREST APIを作るかどうかを決めていない。
またよりシンプルなほうがGo言語っぽい気がするので、今回はrouterを調べることとした。

routerの比較

routerとは単に「このURLにアクセスしてきたらこれを実行します」という紐づけを定義するだけのものだと思う。
ただそれだけなのに複数のフレームワークがあるので、前述の記事の上位3フレームワークのREADMEをざっくり見ていく。誤訳ありそうなので原文参照を推奨。

HttpRouter (julienschmidt/httprouter)

https://github.com/julienschmidt/httprouter

  • 軽量で高速
  • ルーティングパターンに変数が含まれる形をサポートする
  • URLが複数のルーティングパターンにマッチするせいで複雑になっている他のrouterと違い、ただ一つのルーティングパターンにマッチするか、まったくマッチしないかのどちらかになる
  • 末尾のスラッシュは自動的に処理される(この機能はオフにできる)
  • RESTful APIを作れる
  • http.Handler インターフェースを実装している

    gorilla/mux

    https://github.com/gorilla/mux
  • http.Handler インターフェースを実装している
  • リクエストはURLのホスト、パス、パスのプレフィクス、……など色々なものでマッチングさせられる
  • URL中の変数をサポートする
  • サブルーターとして使え、子ルートは親ルートにマッチしたときだけ試行される

    chi (go-chi/chi)

    https://github.com/go-chi/chi
  • 軽量で、Go言語らしく、組み立てやすい
  • net/http と100%互換性がある
  • middlewareやサブルーターなどを想定している
  • ドキュメントを生成できる
  • 外部依存がない

    比較結果

    たぶん全部標準パッケージと互換性があり、標準パッケージよりちょっと便利になるということだと思う。
    なんとなく使おうかなと思ったのは chi。