Router.HandleFunc()をただ使うだけだと、net/httpと大差ありません。
ということで、今度はHTTP Methodもルーティングの条件に加えてみましょう。
package main
import (
"fmt"
"github.com/gorilla/mux"
"net"
"net/http"
)
func getUserAPI(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "get user API")
}
func createUserAPI(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "create user API")
}
func main() {
r := mux.NewRouter()
r.HandleFunc("/user", getUserAPI).Methods("GET")
r.HandleFunc("/user", createUserAPI).Methods("POST")
l, _ := net.Listen("tcp", ":9000")
http.Serve(l, r)
}
Router.HundleFunc()の戻り値はRouteオブジェクトで、作成したルーティングの情報を持っています。
このオブジェクトにMethods()メソッドを使って、反応するHTTP Methodに制限を付けることができます。
本当にできているか、curlコマンドで確認してみましょう。まずはGET
curl -v -X GET 'localhost:9000/user'
< HTTP/1.1 200 OK
< Date: Thu, 24 Jul 2014 07:27:00 GMT
< Content-Length: 12
< Content-Type: text/plain; charset=utf-8
<
get user API
getUserAPI()が実行されました。続いてPOST
curl -v -X POST 'localhost:9000/user'
< HTTP/1.1 200 OK
< Date: Thu, 24 Jul 2014 07:27:44 GMT
< Content-Length: 15
< Content-Type: text/plain; charset=utf-8
<
create user API
ちゃんとcreateUserAPI()が呼ばれました。