Dans cet article, l'éditeur PHP Baicao présentera comment renvoyer un objet json à partir d'un point de terminaison d'API REST écrit en langage Go. En tant que format d'échange de données courant, json est largement utilisé dans le développement Web. En utilisant le package net/http et le package encoding/json du langage Go, nous pouvons facilement convertir les données au format json et les renvoyer au client. Cet article expliquera ce processus en détail et fournira un exemple de code pour aider les lecteurs à comprendre et à mettre en pratique. Que vous soyez débutant ou développeur expérimenté, cet article vous aidera. commençons!
J'utilise Golang pour créer une API. Je souhaite que ce point de terminaison renvoie des données json afin de pouvoir les utiliser dans mon interface.
http.handlefunc("/api/orders", createorder)
Actuellement, ma fonction ne renvoie pas d'objet json et la variable jsonmap n'est pas utilisée create struc
pour mapper le corps de la réponse au serveur
Ma structure
type createorder struct { id string `json:"id"` status string `json:"status"` links []links `json:"links"` }
Ma fonction de création de commande (mise à jour en fonction des commentaires)
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) }
C'est ce qui s'imprime. Imprimer la valeur sans clé d'objet
{2mh36251c2958825n created [{something self get} {soemthing approve get}]}
devrait imprimer
{ 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) } }
Alternativement, si vous souhaitez envoyer des données d'un service externe vers le frontend de manière immuable, vous devriez pouvoir procéder comme suit :
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) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!