最近做的一個項目是採用前後端分離模式寫前端,後端是fabric區塊鏈,提供介面,需要使用post方法進行訪問。如上一章註冊用戶,就是需要把用戶名、賬戶信息轉換成json形式 使用post方法傳給後端區塊鏈的url.話不多說直接看代碼分析。 /*post1註冊用戶*/ func signup(url ...
最近做的一個項目是採用前後端分離模式寫前端,後端是fabric區塊鏈,提供介面,需要使用post方法進行訪問。如上一章註冊用戶,就是需要把用戶名、賬戶信息轉換成json形式
使用post方法傳給後端區塊鏈的url.話不多說直接看代碼分析。
/*post1註冊用戶*/ func signup(url string, i *CreateUserInput) (status int) { data, err := json.Marshal(i) if err != nil { log.Fatal(err) } req, err := http.NewRequest("POST", url, bytes.NewBuffer(data)) if err != nil { log.Fatal(err) } req.Header.Set("Content-Type", "application/json") var client = http.DefaultClient response, err := client.Do(req) if err != nil { log.Fatal(err) } defer response.Body.Close() BodyData, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } var info = BaseInfo{} err = json.Unmarshal(BodyData, &info) if err != nil { log.Fatal(err) } switch info.Code { case 200: fmt.Printf("%s 註冊成功\n", info.Msg) case 500: fmt.Printf("註冊失敗,%s", info.Msg) return } status = info.Code return }
這個函數,是我自己寫的,按照網上其他post提交方法寫的。
參數:url string, i *CreateUserInput;url是需要post的URL;i是結構體;
函數中data, err := json.Marshal(i)將結構體轉成json形式,
req, err := http.NewRequest("POST", url, bytes.NewBuffer(data))需要提供參數post
重點的是這段代碼:
var info = BaseInfo{} err = json.Unmarshal(BodyData, &info) if err != nil { log.Fatal(err) } switch info.Code { case 200: fmt.Printf("%s 註冊成功\n", info.Msg) case 500: fmt.Printf("註冊失敗,%s", info.Msg) return } status = info.Code
獲取後端區塊鏈給的POST返回值,即那邊介面的響應是否成功(這個後端區塊鏈會給一個類似狀態碼的結構體形式)
err = json.Unmarshal(BodyData, &info)將接收到的json轉成結構體。
如果狀態碼為200,則POST提交數據成功,否則則輸出錯誤信息。
參考文章:
https://developer.aliyun.com/article/1023715