كيفية استهلاك نقاط نهاية واجهة برمجة تطبيقات GraphQL في Go

كيفية استهلاك نقاط نهاية واجهة برمجة تطبيقات GraphQL في Go

لغة استعلام الرسم البياني (GraphQL) هي لغة ومواصفات للتفاعل مع واجهات برمجة تطبيقات GraphQL ، وهي بنية خادم عميل تعتمد على HTTP للاتصال عبر الويب.





أصدر Facebook GraphQL كبديل لمعيار REST المعماري. تعالج GraphQL معظم المشكلات المتعلقة بـ REST بطريقة عديمة الحالة وقابلة للتخزين المؤقت. إنه يوفر بناء جملة بسيطًا وبديهيًا يصف الإخراج (المخرجات) أو المدخلات (المدخلات) المتوقعة ، وتقوم واجهة برمجة التطبيقات (API) بترحيل البيانات المطابقة للطلب.





ألعاب دوس مجانية تحميل النسخة الكاملة
اجعل فيديو اليوم

نظرًا لأن GraphQL هي أحد المواصفات ، يمكنك إنشاء واستهلاك واجهات برمجة تطبيقات GraphQL بأي لغة برمجة من جانب الخادم ، بما في ذلك Go.





الشروع في العمل مع واجهات برمجة تطبيقات GraphQL في Go

تعتمد GraphQL على بنية HTTP ، و Go يوفر وظائف HTTP المضمنة فيه http حزمة.

يمكنك استخدام ال http الحزمة ل تستهلك RESTful APIs في Go ، من بين ميزات أخرى. بالنسبة إلى GraphQL ، يمكنك إجراء الاستعلامات والطفرات على خوادم GraphQL APIs باستخدام http الحزمة والحزم المضمنة الأخرى.



  قسم نظرة عامة على حزمة Go HTTP

حزم عميل GraphQL مثل ماشين بوكس أو shurCooL's اجعل عملية التفاعل مع واجهات برمجة تطبيقات GraphQL أكثر سهولة.

يمكنك استخدام ال http الحزمة دون أي تبعيات للتفاعل مع واجهة برمجة تطبيقات GraphQL. قم باستيراد هذه الحزم في ملف Go للبدء:





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

ستستخدم ملف بايت الحزمة لإنشاء مخزن مؤقت جديد للطلب و json حزمة لتنظيم خريطة إلى نص طلب JSON. يمكنك استخدام ioutil لقراءة نص الاستجابة ، و زمن الحزمة لتعيين حد زمني للطلب.

الاستعلام عن واجهات برمجة تطبيقات GraphQL مع Go

هناك العديد من واجهات برمجة تطبيقات GraphQL العامة المجانية التي يمكنك الاستعلام عنها ودمجها في تطبيقاتك. بالنسبة إلى هذه المقالة ، ستطلب استعلامًا عن البلدان API في Apollo GraphQL للاستعلام عن بيانات حول البلدان في جميع أنحاء العالم.





عادةً ما تكون جميع عمليات GraphQL عبارة عن طلبات POST نظرًا لأنه يجب أن تحتوي على حمولة (نص الطلب). تقبل معظم واجهات برمجة تطبيقات GraphQL نص طلب JSON كنوع المحتوى ، و يوفر Go وظائف لاستخدام الخرائط والهياكل للعمل مع JSON .

ستحتاج إلى دراسة بنية مخطط GraphQL للاستعلام عن واجهة برمجة التطبيقات. سيكون الاستعلام هو نفسه استعلام GraphQL العادي باستثناء أن العملية (الاستعلام أو الطفرة) هي المفتاح ، والبيانات هي قيمة الخريطة.

إليك كيفية الإعلان عن مثيل خريطة JSON الذي ستنظمه إلى JSON للطلب.

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

ال jsonMapInstance المتغير هو مثيل الخريطة لجسم الطلب. القيمة هي سلسلة من بيانات طلب البحث التي تتوقعها من واجهة برمجة التطبيقات. في هذه الحالة ، بيانات طلب البحث التي تتوقعها من واجهة برمجة التطبيقات الدول المخطط هي اسم و هاتف و عملة و الشفرة ، و الرموز التعبيرية مجالات.

يمكنك استخدام ال مارشال طريقة 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 إلى واجهة برمجة التطبيقات. يمكنك إنشاء نسخة طلب جديدة بامتداد طلب جديد الطريقة ، والتي تأخذ نوع الطلب وعنوان URL ومخزن 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. ال عميل تتيح لك الطريقة أيضًا تعيين حد زمني لطلبك باستخدام ملف زمن حزمة.

تطبيق netflix لا يعمل على iPhone
 
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 بامتداد ioutil الحزمة اقرأ كل شيء طريقة. يأخذ تدفق الإخراج ويعيد شريحة بايت من البيانات مع وجود خطأ يمكنك التعامل معه.

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

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

باستخدام وظيفة السلسلة المضمنة ، يمكنك تحويل استجابة شريحة البايت إلى نوع السلسلة.

fmt.Println(string(responseData)) 

إليك رد يوضح نتيجة طلب واجهة برمجة التطبيقات:

  يُظهر ناتج استعلام واجهة برمجة تطبيقات GraphQL قائمة بالبلدان والحقول المطلوبة.

يشبه استهلاك واجهات برمجة التطبيقات RESTful استخدام واجهات برمجة تطبيقات GraphQL

نظرًا لأن كلاً من واجهات برمجة تطبيقات REST و GraphQL تستخدم بروتوكول HTTP ، فإن استهلاك كلٍّ منهما عملية مشابهة جدًا ، ويمكنك استخدام http حزمة لكلا الحالتين.

ستحتاج إلى إنشاء عملاء وطلب مثيلات وقراءة البيانات بنفس الحزم.