لغة استعلام الرسم البياني (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 الحزمة والحزم المضمنة الأخرى.

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

instagram viewer

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

يستورد (
"بايت"
"ترميز / json"
"FMT"
"io / ioutil"
"net / http"
"وقت"
)

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

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

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

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

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

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

jsonMapInstance: = خريطة[خيط]خيط {
"استفسار": `
{
بلدان {
اسم،
هاتف،
عملة،
شفرة،
الرموز التعبيرية
}
}
`,
}

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

يمكنك استخدام ال مارشال طريقة json الحزمة لتشفير مثيل الخريطة إلى JSON. ال مارشال تقوم الطريقة بإرجاع JSON المشفر وخطأ للحالات التي بها مشكلة ترميز.

jsonResult ، يخطئ: = json. مارشال (jsonMapInstance)

لو يخطئ! لا شيء {
FMT. Printf ("حدث خطأ أثناء تنظيم مثيل JSON٪ v" ، يخطئ)
}

بمجرد تشفير الخريطة إلى JSON ، يمكنك إرسال طلب POST إلى واجهة برمجة التطبيقات. يمكنك إنشاء نسخة طلب جديدة بامتداد طلب جديد الطريقة ، والتي تأخذ نوع الطلب وعنوان URL ومخزن JSON المؤقت.

ال طلب جديد طريقة إرجاع نسخة الطلب. سيتعين عليك تعيين نوع المحتوى وفقًا لمواصفات API. يمكنك تعيين نوع المحتوى لطلبات HTTP بامتداد تعيين طريقة رأس طريقة مثيل الطلب الخاص بك.

newRequest ، يخطئ: = http. NewRequest ("POST"، "https://countries.trevorblades.com/graphql "بايت. NewBuffer (jsonResult))
طلب جديد. رأس. مجموعة ("نوع المحتوى" ، "تطبيق / json")

يمكنك إنشاء عميل HTTP بسيط لطلبك باستخدام ملف عميل طريقة حزمة HTTP. ال عميل تتيح لك الطريقة أيضًا تعيين حد زمني لطلبك باستخدام ملف وقت طَرد.


العميل: = & http. العميل {المهلة: الوقت. ثانية * 5}
الاستجابة ، يخطئ: = العميل. هل (طلب جديد)

لو يخطئ! لا شيء {
FMT. Printf ("حدث خطأ أثناء تنفيذ الطلب٪ v" ، يخطئ)
}

بعد أن تعلن عن عميل HTTP ، نفِّذ طلب واجهة برمجة التطبيقات باستخدام يفعل طريقة. ال يفعل يقبل التابع نسخة الطلب ويعيد الاستجابة والخطأ.

يمكنك قراءة الرد على طلب API بامتداد ioutil الحزمة اقرأ كل شيء طريقة. يأخذ تدفق الإخراج ويعيد شريحة بايت من البيانات مع وجود خطأ يمكنك التعامل معه.

responseData ، يخطئ: = ioutil. ReadAll (استجابة. جسم)

لو يخطئ! لا شيء {
FMT. Printf ("خطأ قراءة البيانات٪ v" ، يخطئ)
}

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

FMT. Println (خيط(بيانات الاستجابة))

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

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

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

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