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 חבילה וחבילות מובנות אחרות.
חבילות לקוח GraphQL כמו של Machinebox אוֹ shurCooL's להפוך את תהליך האינטראקציה עם ממשקי API של GraphQL לקל עוד יותר.
אתה יכול להשתמש ב http חבילה ללא תלות כלשהי לאינטראקציה עם GraphQL API. יבא את החבילות האלה לקובץ ה-Go שלך כדי להתחיל:
יְבוּא (
"בייטים"
"קידוד/json"
"fmt"
"io/ioutil"
"נטו/http"
"זְמַן"
)
אתה תשתמש ב- בתים חבילה ליצירת מאגר חדש עבור הבקשה וה- json חבילה לרכז מפה לגוף הבקשה של JSON. אתה יכול להשתמש יוטיל לקרוא את גוף התגובה, ואת זְמַן חבילה לקביעת מגבלת זמן לבקשה.
שאילתות ממשקי API של GraphQL עם Go
יש הרבה ממשקי API ציבוריים של GraphQL בחינם שאתה יכול לבצע שאילתות ולשלב ביישומים שלך. עבור מאמר זה, תשאל את ה-API של המדינות של Apollo GraphQL כדי לבצע שאילתות בנתונים על מדינות ברחבי העולם.
כל פעולות GraphQL הן בדרך כלל בקשות POST מכיוון שהן חייבות להיות מטען (גוף הבקשה). רוב ממשקי ה-API של GraphQL מקבלים את גוף בקשת JSON כסוג התוכן, וכן Go מספק פונקציונליות לשימוש במפות ומבנים לעבודה עם JSON.
תצטרך ללמוד את המבנה של סכימת GraphQL כדי לשאול את ה-API. השאילתה תהיה זהה לשאילתת GraphQL רגילה, אלא שהפעולה (שאילתה או מוטציה) היא המפתח, והנתונים הם ערך המפה.
כך תוכל להכריז על מופע מפה של JSON שתסדר ל-JSON עבור הבקשה.
jsonMapInstance := מַפָּה[חוּט]חוּט {
"שאילתא": `
{
מדינות {
שֵׁם,
טלפון,
מַטְבֵּעַ,
קוד,
אימוג'י
}
}
`,
}
ה jsonMapInstance משתנה הוא מופע המפה עבור גוף הבקשה. הערך הוא מחרוזת של נתוני השאילתה שאתה מצפה מ-API. במקרה זה, נתוני השאילתה שאתה מצפה מ-API מדינות סכימה הם שֵׁם, טלפון, מַטְבֵּעַ, קוד, ו אימוג'י שדות.
אתה יכול להשתמש ב מַרשַׁל שיטת ה json חבילה כדי לקודד את מופע המפה ל-JSON. ה מַרשַׁל השיטה מחזירה את ה-JSON המקודד ושגיאה למקרים עם בעיית קידוד.
jsonResult, err := json. מרשל (jsonMapInstance)
אם טעות != אֶפֶס {
fmt. Printf("היתה שגיאה בארגון המופע של JSON %v", err)
}
לאחר שקודדת את המפה ל-JSON, תוכל לשלוח את בקשת ה-POST ל-API. אתה יכול ליצור מופע בקשה חדש עם בקשה חדשה שיטה, שמקבלת את סוג הבקשה, כתובת האתר ומאגר ה-JSON.
ה בקשה חדשה השיטה מחזירה מופע בקשה. יהיה עליך להגדיר את סוג התוכן בהתאם למפרטי ה-API. אתה יכול להגדיר את סוג התוכן עבור בקשות HTTP עם מַעֲרֶכֶת שיטת ה כּוֹתֶרֶת שיטת מופע הבקשה שלך.
newRequest, טעות := http. NewRequest("POST", "https://countries.trevorblades.com/graphql", bytes. NewBuffer (jsonResult))
בקשה חדשה. כּוֹתֶרֶת. Set("Content-Type", "application/json")
אתה יכול ליצור לקוח HTTP פשוט עבור הבקשה שלך עם לָקוּחַ שיטה של חבילת HTTP. ה לָקוּחַ השיטה גם מאפשרת לך להגדיר מגבלת זמן לבקשה שלך עם זְמַן חֲבִילָה.
לקוח := &http. לקוח{זמן קצוב: זמן. שנייה* 5}
תגובה, טעות := לקוח. עשה (חדשהבקשה)
אם טעות != אֶפֶס {
fmt. Printf ("היתה שגיאה בביצוע הבקשה%v", שגיאה)
}
לאחר שהצהרת על לקוח HTTP, בצע את בקשת ה-API שלך עם ה- לַעֲשׂוֹת שיטה. ה לַעֲשׂוֹת השיטה מקבלת את מופע הבקשה ומחזירה את התגובה ושגיאה.
אתה יכול לקרוא את התגובה של בקשת ה-API עם ה- יוטיל של החבילה תקרא הכל שיטה. הוא קולט זרם פלט ומחזיר פרוסת בתים של הנתונים עם שגיאה שאתה יכול לטפל בה.
responseData, err := ioutil. ReadAll (תגובה. גוּף)
אם טעות != אֶפֶס {
fmt. Printf("Data Read Error%v", err)
}
עם פונקציית המחרוזת המובנית, אתה יכול להמיר את תגובת פרוסת הבתים לסוג המחרוזת.
fmt. Println(חוּט(responseData))
הנה תגובה המציגה את התוצאה של בקשת ה-API:
צריכת ממשקי API של RESTful היא כמו צריכת ממשקי API של GraphQL
מכיוון שגם ממשקי API של REST וגם של GraphQL משתמשים בפרוטוקול HTTP, צריכת כל אחד מהם היא תהליך דומה מאוד, ואתה יכול להשתמש ב- http חבילה לשני המקרים.
תצטרך ליצור לקוחות, לבקש מופעים ולקרוא את הנתונים עם אותן חבילות.