Go語言實現複雜Restful Api
阿新 • • 發佈:2019-02-18
章節
- 程式執行結果
- 什麼是Restful Api?
- go 實現複雜 Restful Api
- 感想
0.程式執行結果
程式執行結果
1.什麼是Restful Api
2. go 實現複雜 Restful Api
2.1 go http server 端程式碼 httpServer.go 實現
package restApi import ( "fmt" "github.com/gorilla/mux" "html" "net/http" ) func fooHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello,%q", html.EscapeString(r.URL.Path)) } func doGetApiParam(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) toDoId := vars["toDoId"] fmt.Fprintf(w, "toDoId is: "+toDoId) } //開啟http伺服器 func FooHandler() { router := mux.NewRouter().StrictSlash(true) router.HandleFunc("/foo", fooHandler) router.HandleFunc("/hello", fooHandler) router.HandleFunc("/todo/{toDoId}", doGetApiParam) //返回 api json 資料 router.HandleFunc("/users", restApiHandler) //返回 productsList 資料 router.HandleFunc("/productsList", productsList) //開啟http服務,並引入路由管理器 http.ListenAndServe(":8082", router) }
2.2 複雜 Api handler 端程式碼 complexApi.go 實現
package restApi import ( "encoding/json" "net/http" ) /** 1.需求 編寫返回商品列表資料的Api,返回資料對應的 struct (go 中struct為值型別)如下所示 */ //定義介面返回的核心資料 如商品詳情資訊 type ProductInfo struct { Name string `json:"name"` //商品名稱 Des string `json:"des"` //商品資訊描述 UseMethod string `json:"useMethod"` //使用方法 UseRange string `json:"useRange"` //使用範圍 ValidDate string `json:"validDate"` //有效期 RpbStatement string `json:"rpbStatement"` //權責宣告 } type Data struct { ProductsInfo []ProductInfo `json:"productsInfo"` } //定義介面返回的data資料 type ApiData struct { //[結構體變數名 | 變數型別 | json 資料 對應欄位名] ErrCode int `json:"errCode"` //介面響應狀態碼 Msg string `json:"msg"` //介面響應資訊 Data Data `json:"data"` } //請求路由(對映)至 productsList() handler func productsList(w http.ResponseWriter, r *http.Request) { //1.介面狀態碼 errorCode := 0 //2.介面返回資訊 msg := "get products list success!" product1 := ProductInfo{ "柿餅", "來自陝西富平的特產", "開箱即食", "全國", "2018-10-20 至 2018-12-31", "與xx公司無關", } product2 := ProductInfo{ "金槍魚", "來自深海的美味", "紅燒、清蒸均可", "全國", "2018-10-20 至 2018-12-31", "與xx公司無關", } product3 := ProductInfo{ "鯰魚", "來自淡水的美味", "紅燒、清蒸均可", "全國", "2018-10-20 至 2018-12-31", "與xx公司無關", } //3.省略對應 DB(關係、非關係、搜尋引擎) 操作,以 hard code 代替 data := Data{[]ProductInfo{product1, product2, product3}} //4.組裝介面返回的資料 apiData := ApiData{errorCode, msg, data} //5.介面響應複雜json資料 json.NewEncoder(w).Encode(apiData) }
感想
簡單的東西需要記錄,刻意練習才能保持精進!