ご閲覧いただきありがとうございます。
##やりたいこと
Go言語で、標準パッケージのみでRest APIを実装出来るようになりたいです。
しかし、ネットにある情報ではGorilla muxを使ったものばかりで参考になりません。
##やってみたこと
自分でも以下のように実装してみたのですが、これだとgorilla muxを使っていないのでHTTPリクエストメソッドと自前で用意したメソッドを関連づけられません。
Go
1package main 2 3import ( 4 "fmt" 5 "net/http" 6) 7 8func homePage(w http.ResponseWriter, r *http.Request) { 9 fmt.Fprintf(w, "home page hit") 10} 11 12func main() { 13 // handleRequest() 14 http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) { 15 fmt.Fprintf(w, "Hello,") //Gorilla muxを使えば、ここに .Methods("GET")というようにHTTPメソッドを紐づけられる 16 }) 17 http.ListenAndServe(":8080", nil) 18}
Gorilla muxを使った実装はこちらです。これでやりたいことは実現できているのですが、標準パッケージのみで出来るようになりたいです。
Go
1package main 2 3import ( 4 "encoding/json" 5 "fmt" 6 "io/ioutil" 7 "net/http" 8 9 "github.com/gorilla/mux" 10) 11 12func homeLink(w http.ResponseWriter, r *http.Request) { 13 fmt.Fprintf(w, "Welcome home!") 14} 15 16func main() { 17 router := mux.NewRouter().StrictSlash(true) 18 router.HandleFunc("/", homeLink) 19 router.HandleFunc("/events", getAllEvents).Methods("GET") 20 router.HandleFunc("/events/{id}", getOneEvent).Methods("GET") 21 22 http.ListenAndServe(":8080", router) 23} 24 25type event struct { 26 ID string `json:"ID"` 27 Title string `json:"Title"` 28 Description string `json:"Description"` 29} 30 31type allEvents []event 32 33var events = allEvents{ 34 { 35 ID: "11", 36 Title: "Introduction to Golang", 37 Description: "Come join us for a chance to learn how golang works and get to eventually try it out", 38 }, 39} 40 41func getOneEvent(w http.ResponseWriter, r *http.Request) { 42 eventID := mux.Vars(r)["id"] 43 44 for _, singleEvent := range events { 45 if singleEvent.ID == eventID { 46 json.NewEncoder(w).Encode(singleEvent) 47 } 48 } 49} 50 51func getAllEvents(w http.ResponseWriter, r *http.Request) { 52 json.NewEncoder(w).Encode(events) 53} 54
もしお分かりになる方がいましたら、どうかお力をお貸しください。よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/22 23:00
2019/09/24 01:07
2019/09/24 01:08
2019/09/25 10:33