כיצד לצרוך נקודות קצה של GraphQL API ב-Go

כיצד לצרוך נקודות קצה של GraphQL API ב-Go

Graph Query Language (GraphQL) היא שפה ומפרט לאינטראקציה עם ממשקי API של GraphQL, ארכיטקטורת שרת-לקוח מבוסס HTTP לתקשורת ברחבי האינטרנט.





פייסבוק פרסמה את GraphQL כחלופה לתקן האדריכלי REST. GraphQL מטפל ברוב הבעיות עם REST באופן חסר מצב וניתן לקובץ שמור. הוא מספק תחביר פשוט ואינטואיטיבי המתאר את הפלט/ים או הקלט/ים הצפויים, וה-API מעביר את הנתונים התואמים את הבקשה.





איפור של סרטון היום

מכיוון ש-GraphQL הוא מפרט, אתה יכול לבנות ולצרוך ממשקי API של GraphQL בכל שפת תכנות בצד השרת, כולל Go.





תחילת העבודה עם ממשקי API של GraphQL ב-Go

GraphQL מבוסס על ארכיטקטורת HTTP , ו-Go מספקת פונקציונליות HTTP במובנים שלה http חֲבִילָה.

אתה יכול להשתמש ב http חבילה ל לצרוך ממשקי API של RESTful ב-Go , בין היתר. עבור GraphQL, אתה יכול לבצע שאילתות ומוטציות לשרתי GraphQL APIs עם http חבילה וחבילות מובנות אחרות.



  סעיף סקירה של חבילת Go HTTP

חבילות לקוח GraphQL כמו של Machinebox אוֹ shurCooL's להפוך את תהליך האינטראקציה עם ממשקי API של GraphQL לקל עוד יותר.

אתה יכול להשתמש ב http חבילה ללא תלות כלשהי לאינטראקציה עם GraphQL API. יבא את החבילות האלה לקובץ ה-Go שלך כדי להתחיל:





import ( 
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)

אתה תשתמש ב- בתים חבילה ליצירת מאגר חדש עבור הבקשה וה- json חבילה לרכז מפה לגוף הבקשה של JSON. אתה יכול להשתמש יוטיל לקרוא את גוף התגובה, ואת זְמַן חבילה לקביעת מגבלת זמן לבקשה.

דרכים להרוויח כסף במשחקי וידיאו

שאילתות ממשקי API של GraphQL עם Go

יש הרבה ממשקי API ציבוריים של GraphQL בחינם שאתה יכול לבצע שאילתות ולשלב ביישומים שלך. עבור מאמר זה, תשאל את ה-API של המדינות של Apollo GraphQL כדי לבצע שאילתות בנתונים על מדינות ברחבי העולם.





כל פעולות GraphQL הן בדרך כלל בקשות POST מכיוון שהן חייבות להיות מטען (גוף הבקשה). רוב ממשקי ה-API של GraphQL מקבלים את גוף בקשת JSON כסוג התוכן, וכן Go מספק פונקציונליות לשימוש במפות ומבנים לעבודה עם JSON .

תצטרך ללמוד את המבנה של סכימת GraphQL כדי לשאול את ה-API. השאילתה תהיה זהה לשאילתת GraphQL רגילה, אלא שהפעולה (שאילתה או מוטציה) היא המפתח, והנתונים הם ערך המפה.

כך תוכל להכריז על מופע מפה של JSON שתסדר ל-JSON עבור הבקשה.

jsonMapInstance := map[string]string { 
"query": `
{
countries {
name,
phone,
currency,
code,
emoji
}
}
`,
}

ה jsonMapInstance משתנה הוא מופע המפה עבור גוף הבקשה. הערך הוא מחרוזת של נתוני השאילתה שאתה מצפה מ-API. במקרה זה, נתוני השאילתה שאתה מצפה מ-API מדינות סכימה הם שֵׁם , טלפון , מַטְבֵּעַ , קוד , ו אימוג'י שדות.

אתה יכול להשתמש ב מַרשַׁל שיטת ה json חבילה כדי לקודד את מופע המפה ל-JSON. ה מַרשַׁל השיטה מחזירה את ה-JSON המקודד ושגיאה למקרים עם בעיית קידוד.

jsonResult, err := json.Marshal(jsonMapInstance) 

if err != nil {
fmt.Printf("There was an error marshaling the JSON instance %v", err)
}

לאחר שקודדת את המפה ל-JSON, תוכל לשלוח את בקשת ה-POST ל-API. אתה יכול ליצור מופע בקשה חדש עם בקשה חדשה שיטה, שמקבלת את סוג הבקשה, כתובת האתר ומאגר ה-JSON.

ה בקשה חדשה השיטה מחזירה מופע בקשה. יהיה עליך להגדיר את סוג התוכן בהתאם למפרטי ה-API. אתה יכול להגדיר את סוג התוכן עבור בקשות HTTP עם מַעֲרֶכֶת שיטת ה כּוֹתֶרֶת שיטת מופע הבקשה שלך.

newRequest, err := http.NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes.NewBuffer(jsonResult)) 
newRequest.Header.Set("Content-Type", "application/json")

אתה יכול ליצור לקוח HTTP פשוט עבור הבקשה שלך עם לָקוּחַ שיטה של ​​חבילת HTTP. ה לָקוּחַ השיטה גם מאפשרת לך להגדיר מגבלת זמן לבקשה שלך עם זְמַן חֲבִילָה.

 
client := &http.Client{Timeout: time.Second * 5}
response, err := client.Do(newRequest)

if err != nil {
fmt.Printf("There was an error executing the request%v", err)
}

לאחר שהצהרת על לקוח HTTP, בצע את בקשת ה-API שלך עם ה- לַעֲשׂוֹת שיטה. ה לַעֲשׂוֹת השיטה מקבלת את מופע הבקשה ומחזירה את התגובה ושגיאה.

אתה יכול לקרוא את התגובה של בקשת ה-API עם ה- יוטיל של החבילה תקרא הכל שיטה. הוא קולט זרם פלט ומחזיר פרוסת בתים של הנתונים עם שגיאה שאתה יכול לטפל בה.

responseData, err := ioutil.ReadAll(response.Body) 

if err != nil {
fmt.Printf("Data Read Error%v", err)
}

עם פונקציית המחרוזת המובנית, אתה יכול להמיר את תגובת פרוסת הבתים לסוג המחרוזת.

למי יש גישה לכונן הגוגל שלי
fmt.Println(string(responseData)) 

הנה תגובה המציגה את התוצאה של בקשת ה-API:

  הפלט משאילתת GraphQL API מציגה רשימה של מדינות והשדות המבוקשים שלהן.

צריכת ממשקי API של RESTful היא כמו צריכת ממשקי API של GraphQL

מכיוון שגם ממשקי API של REST וגם של GraphQL משתמשים בפרוטוקול HTTP, צריכת כל אחד מהם היא תהליך דומה מאוד, ואתה יכול להשתמש ב- http חבילה לשני המקרים.

תצטרך ליצור לקוחות, לבקש מופעים ולקרוא את הנתונים עם אותן חבילות.