package main import ( "encoding/json" "fmt" "log" "net/http" ) type NewMemoResponse struct { ID int64 `json:"ID"` } func httpGetMemos(w http.ResponseWriter, r *http.Request) { memos := getMemos(DB) w.Header().Set("Content-Type", "application/json") err := json.NewEncoder(w).Encode(memos) if err != nil { log.Fatal(err) } } func httpCreateMemo(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { w.WriteHeader(400) fmt.Fprintf(w, "ParseForm() err: %v", err) return } message := r.FormValue("message") if len(message) == 0 { w.Header().Set("Content-Type", "application/json") w.WriteHeader(422) json.NewEncoder(w).Encode(ErrorResponse{"Memo must have a Message"}) return } id := insertMemo(DB, message) w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(NewMemoResponse{id}) } func memosEndpoint(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": httpGetMemos(w, r) case "POST": httpCreateMemo(w, r) default: w.WriteHeader(405) fmt.Fprintf(w, "HTTP method must be GET or POST") } }