HTTP Methodを指定する

ツイート このエントリーをはてなブックマークに追加
1つ上へ / ブログトップへ

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()が呼ばれました。

1つ上へ / ブログトップへ