以前書いた以下のエントリーからさらい一歩進めました。
内容は net/http
かgorilla/mux
を使ってroutingを作る超薄いAPIサーバーを作成する際にこれだけコピれば簡単にapiサーバーを立てることができるみたいなものを作ることです。
rubyでいうsinatra的なものを作りたかった感じです。
net/httpを使うパターン
ディレクトリ構造
go_diet_api_skelton src go_diet_api_skelton handler/ root.go web/ router.go main.go
実際のコードは以下
/
にアクセスしてみる
$ curl -i http://localhost:8080 土 12/23 09:51:22 2017 HTTP/1.1 200 OK Date: Sat, 23 Dec 2017 00:51:33 GMT Content-Length: 11 Content-Type: text/plain; charset=utf-8 Hello World
goの標準機能だけで作成するどシンプルなAPIサーバーだと思います。
goの net/http
が非常にシンプルで強力なので、正直これくらいシンプルな方がいいのではと思います。
gorilla/muxを使う
ディレクトリ構造
※ ディレクトリ構造は同じ
go_diet_api_skelton src go_diet_api_skelton handler/ root.go web/ router.go main.go
gorilla/mux
を入れる。
$ dep ensure -add github/gorilla/mux
実際に書いたコードは以下
/
にアクセスしてみる
$ curl -i http://localhost:8080 土 12/23 09:51:22 2017 HTTP/1.1 200 OK Date: Sat, 23 Dec 2017 00:51:33 GMT Content-Length: 11 Content-Type: text/plain; charset=utf-8 Hello World
gorillaの方が以下のような感じで、routingでmethod等を指定できるので便利です。
m.HandleFunc("/", handler.Root).Methods("GET")
まとめ
以前のエントリーでは、routingまで main.go
に記載していました。
しかし、main.goは薄く保ちつつ、routingの責務は router.go
に負わせた方が適切だと考え、いっそのこと、汎用的に使える雛形が欲しいと思ったので、2パターンで書いてみました。