GoのWeb Application Frameworkでオススメは?という質問をよく受ける。 標準ライブラリのhttpパッケージ使えばおk
とまずは返答している。ただ、RESTで様々なHTTPメソッドをサポートする必要があり、かつ /v1/users/{id}
のようなPath内にIDが入る場合の対応を行いたい場合は
あたりの標準のhttpパッケージに沿ったものをオススメしている。理由としては以下。
- ユニットテストで標準ライブラリのhttptestパッケージが使える(これ重要)
- 他の標準のhttpパッケージに沿ったフレームワークに乗り換えやすい
- もし乗り換えた場合でもテストコードは書き換えなくてよいはず
標準のhttpパッケージに沿ったもの、というのは、 ハンドラを登録する時に http.Handler
を受け付けられるものという意味で書いている。
パフォーマンスが気になる人は以下を見ておけばいいのではないかと思うが、個人的にはWeb Application FrameworkのパフォーマンスはDBアクセスなどのNetwork I/Oに比べれば誤差だと思うのであんまり気にしなくていいのではないかと思う。
参考までに、gorilla/mux
でRESTfulなAPIをサポートするコードは以下のような感じ
package main import ( "fmt" "log" "net/http" "github.com/gorilla/mux" ) func main() { router := mux.NewRouter() router.HandleFunc("/v1/users/{id:[0-9]+}", usersHandler).Methods("GET") log.Fatal(http.ListenAndServe("localhost:5000", router)) } func usersHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "Your id is %v", vars["id"]) // Path内のid }
- 作者: Mat Ryer,鵜飼文敏,牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/22
- メディア: 大型本
- この商品を含むブログ (3件) を見る