php小編百草在這篇文章中將為大家介紹如何從Go語言寫的REST API端點傳回json物件。作為一種常見的資料交換格式,json在web開發中被廣泛使用。透過使用Go語言的net/http套件和encoding/json套件,我們可以輕鬆地將資料轉換為json格式並傳回給客戶端。本文將詳細說明這個過程,並提供範例程式碼來幫助讀者理解和實踐。無論您是初學者還是有經驗的開發者,本文都將對您有所幫助。讓我們開始吧!
我正在使用 golang 建立 api。我希望此端點返回 json 數據,以便我可以在我的前端中使用它。
http.handlefunc("/api/orders", createorder)
目前我的函數沒有傳回 json 對象,而且 jsonmap 變數沒有使用 create struc
將回應正文對應到伺服器
我的結構
type createorder struct { id string `json:"id"` status string `json:"status"` links []links `json:"links"` }
我的createorder函數(根據評論更新)
func createorder(w http.responsewriter, r *http.request) { accesstoken := generateaccesstoken() w.header().set("access-control-allow-origin", "*") fmt.println(accesstoken) body := []byte(`{ "intent":"capture", "purchase_units":[ { "amount":{ "currency_code":"usd", "value":"100.00" } } ] }`) req, err := http.newrequest("post", base+"/v2/checkout/orders", bytes.newbuffer(body)) req.header.set("content-type", "application/json") req.header.set("authorization", "bearer "+accesstoken) client := &http.client{} resp, err := client.do(req) if err != nil { log.fatalf("an error occured %v", err) } fmt.println(resp.statuscode) defer resp.body.close() if err != nil { log.fatal(err) } var jsonmap createorder error := json.newdecoder(resp.body).decode(&jsonmap) if error != nil { log.fatal(err) } w.writeheader(resp.statuscode) json.newencoder(w).encode(jsonmap) }
這就是列印的內容。列印不帶物件鍵的值
{2mh36251c2958825n created [{something self get} {soemthing approve get}]}
應該要列印
{ id: '8BW01204PU5017303', status: 'CREATED', links: [ { href: 'url here', rel: 'self', method: 'GET' }, ... ] }
func createorder(w http.responsewriter, r *http.request) { // ... resp, err := http.defaultclient.do(req) if err != nil { log.println("an error occured:", err) return } defer resp.body.close() if resp.statuscode != http.statusok /* or http.statuscreated (depends on the api you're using) */ { log.println("request failed with status:", http.status) w.writeheader(resp.statuscode) return } // decode response from external service v := new(createorder) if err := json.newdecoder(resp.body).decode(v); err != nil { log.println(err) return } // send response to frontend w.writeheader(resp.statuscode) if err := json.newencoder(w).encode(v); err != nil { log.println(err) } }
或者,如果您想要將資料從外部服務不變地傳送到前端,您應該可以執行以下操作:
func createOrder(w http.ResponseWriter, r *http.Request) { // ... resp, err := http.DefaultClient.Do(req) if err != nil { log.Println("An Error Occured:", err) return } defer resp.Body.Close() if resp.StatusCode != http.StatusOK /* or http.StatusCreated (depends on the API you're using) */ { log.Println("request failed with status:", http.Status) w.WriteHeader(resp.StatusCode) return } // copy response from external to frontend w.WriteHeader(resp.StatusCode) if _, err := io.Copy(w, resp.Body); err != nil { log.Println(err) } }
以上是從 Go 中的 REST API 端點傳回 json 對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!