Dalam artikel ini, editor PHP Baicao akan memperkenalkan cara mengembalikan objek json daripada titik akhir REST API yang ditulis dalam bahasa Go. Sebagai format pertukaran data biasa, json digunakan secara meluas dalam pembangunan web. Dengan menggunakan pakej net/http bahasa Go dan pakej pengekodan/json, kami boleh menukar data ke dalam format json dengan mudah dan mengembalikannya kepada klien. Artikel ini akan menerangkan proses ini secara terperinci dan menyediakan kod sampel untuk membantu pembaca memahami dan mengamalkan. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan membantu anda. Mari mulakan!
Saya menggunakan golang untuk membina api. Saya mahu titik akhir ini mengembalikan data json supaya saya boleh menggunakannya dalam bahagian hadapan saya.
http.handlefunc("/api/orders", createorder)
Pada masa ini fungsi saya tidak mengembalikan objek json dan pembolehubah jsonmap tidak digunakan create struc
untuk memetakan badan tindak balas ke pelayan
Struktur saya
type createorder struct { id string `json:"id"` status string `json:"status"` links []links `json:"links"` }
Fungsi pesanan cipta saya (dikemas kini berdasarkan komen)
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) }
Ini yang dicetak. Nilai cetakan tanpa kunci objek
{2mh36251c2958825n created [{something self get} {soemthing approve get}]}
hendaklah mencetak
{ 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) } }
Sebagai alternatif, jika anda ingin menghantar data daripada perkhidmatan luaran ke bahagian hadapan secara kekal, anda sepatutnya boleh melakukan perkara berikut:
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) } }
Atas ialah kandungan terperinci Kembalikan objek json dari titik akhir REST API dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!