تقدم GraphQL بديلاً مرنًا لمنهج REST الكلاسيكي عند إنشاء واجهة برمجة تطبيقات.
أحد أهم العوامل التي يجب مراعاتها عند تصميم تطبيق ما هو نوع بنية واجهة برمجة التطبيقات التي يجب استخدامها. يعد التصميم الفعال لواجهة برمجة التطبيقات أمرًا بالغ الأهمية في ضمان أداء التطبيقات طوال دورة حياتها.
تعتبر بنية RESTful هي الطريقة الأكثر شيوعًا ، ولكن لها عيبًا واحدًا مهمًا: بنية نقطة نهاية ثابتة تقوم بإرجاع بيانات محددة مسبقًا. يمكن أن يؤدي هذا التصميم إلى اتصال غير فعال.
في المقابل ، توفر GraphQL - بديلاً لـ REST - مزيدًا من المرونة من خلال السماح لك بطلب البيانات التي تحتاجها فقط.
ما هي واجهات برمجة تطبيقات GraphQL؟
GraphQL هي لغة استعلام يمكنك استخدامها لكتابة واجهات برمجة التطبيقات الخلفية (واجهات برمجة التطبيقات). على عكس واجهات برمجة تطبيقات REST، التي تحتوي على نقاط نهاية متعددة لبيانات مختلفة ، تمتلك واجهات برمجة تطبيقات GraphQL نقطة دخول واحدة فقط.
يمكن للعملاء تحديد البيانات التي يحتاجون إليها في استعلاماتهم من نقطة الإدخال الفردية هذه ، مما يجعلها أكثر مرونة وكفاءة لاسترداد البيانات الضرورية فقط.
ببساطة ، تقوم واجهة برمجة تطبيقات GraphQL بتنفيذ بنية GraphQL التي وصفها ملف مواصفات GraphQL. يتضمن هذا التصميم تحديد المخطط والاستعلامات والطفرات التي يمكن للعملاء التفاعل معها.
فيما يلي تحليل مبسط للمكونات الأساسية لبنية واجهة برمجة تطبيقات GraphQL:
- المخطط: المخطط هو وصف لأنواع البيانات والعمليات التي توفرها واجهة برمجة التطبيقات. في الأساس ، يحدد المخطط هيكل البيانات المتاحة ونوع الاستعلامات والطفرات التي يمكن للعميل تنفيذها لتعديل البيانات.
- الاستعلامات: يستخدم العملاء الاستعلامات لجلب البيانات من قاعدة البيانات عن طريق تحديد هيكل البيانات التي يحتاجون إليها. علاوة على ذلك ، يمكنهم دمج استعلامات متعددة في طلب HTTP واحد لجلب البيانات ذات الصلة من نقاط نهاية متعددة.
- الطفرات: الطفرات هي عمليات تستخدم لتعديل البيانات في قاعدة البيانات. يمكن للعملاء إرسال طلبات الطفرات لإنشاء البيانات أو تحديثها أو حذفها.
قم بإعداد قاعدة بيانات MongoDB
للبدء، إنشاء قاعدة بيانات MongoDB. بدلا من ذلك ، يمكنك قم بإعداد مجموعة MongoDB في السحابة مجانًابمجرد إعداد قاعدة البيانات الخاصة بك ، انسخ سلسلة URI لاتصال قاعدة بيانات MongoDB.
يمكنك العثور على رمز هذا المشروع في ملف مستودع جيثب.
أنشئ خادم أبولو
خادم أبولو هو تطبيق شائع لخادم GraphQL سيسمح لك بإنشاء واجهات برمجة تطبيقات GraphQL في بيئات JavaScript ، بما في ذلك Node.js و Express والمزيد.
قم بإنشاء دليل لمشروع جديد و قرص مضغوط بداخله:
الرسم البياني mkdirql-API-mongoDB
رسم بياني cdql-API-mongoDB
بعد ذلك ، قم بتهيئة مشروع Node.js جديد.
الحرف الأول npm - نعم
ينشئ هذا الأمر ملف package.json ملف.
قم بتثبيت التبعيات المطلوبة
قم بتشغيل الأمر التالي لتثبيت الحزم.
npm تثبيت برنامج apollo-server graphql mongoose
أخيرًا ، قم بإنشاء ملف index.js ملف في الدليل الجذر لمشروعك.
قم بإعداد خادم أبولو
يفتح index.js وأضف الرمز أدناه:
مقدار ثابت {ApolloServer} = يتطلب("خادم أبولو");
مقدار ثابت النمس = يتطلب('النمس');
مقدار ثابت typeDefs = يتطلب("./graphql/typeDefs");
مقدار ثابت محللات = يتطلب("./graphql/resolvers");مقدار ثابت الخادم = جديد ApolloServer ({
typeDefs ،
محللات
});مقدار ثابت MONGO_URI = "mongodb: // localhost: 27017";
النمس
.connect (MONGO_URI، {
useNewUrlParser: حقيقي,
استخدامUnifiedTopology: حقيقي,
})
.ثم(() => {
وحدة التحكم.سجل("ديسيبل متصل");
يعود server.listen ({ ميناء: 5000 });
})
.ثم((الدقة) => {
وحدة التحكم.سجل(`الخادم قيد التشغيل في $ {res.url}`);
})
.يمسك(يخطئ => {
وحدة التحكم.log (err.message) ؛
});
يعمل هذا الرمز على تهيئة خادم GraphQL محلي باستخدام مكتبة Apollo Server. ثم ينشئ اتصالاً بقاعدة بيانات MongoDB مع محدد مواقع المعلومات (URI) الخاص بالاتصال.
لاحظ كيف تقوم الكود بتمرير وسيطتين إلى المثيل الجديد من ApolloServer: typeDefs and resolvers. تحدد هذه أنواع البيانات والعمليات التي يمكن أن تنفذها واجهة برمجة تطبيقات GraphQL.
بعد إعداد الاتصال بقاعدة بيانات MongoDB ، يبدأ الخادم في الاستماع على المنفذ 5000.
تحديد نموذج البيانات
قم بإنشاء مجلد جديد في الدليل الجذر لمجلد المشروع الخاص بك وقم بتسميته عارضات ازياء. في هذا المجلد ، قم بإنشاء أسماء ملفات جديدة dataModel.js وأضف إليها الكود التالي:
مقدار ثابت {نموذج ، مخطط} = يتطلب('النمس');
مقدار ثابت EmploySchema = جديد مخطط({
اسم: خيط,
قسم: خيط,
مرتب: خيط,
});
وحدة.exports = model ('موظف'، EmploySchema) ؛
حدد مخطط GraphQL
يحدد مخطط GraphQL بنية البيانات التي يمكنك الاستعلام عنها باستخدام واجهة برمجة تطبيقات GraphQL. يوضح المخطط أيضًا الاستعلامات والطفرات التي يمكن أن تقوم واجهة برمجة التطبيقات بتشغيلها. يمكنك استخدام الاستعلامات لجلب البيانات والطفرات لتعديلها.
في الدليل الجذر لمشروعك ، قم بإنشاء مجلد جديد ، وقم بتسميته الرسم البياني. داخل هذا المجلد ، أضف ملفين: typeDefs.js و resolvers.js
أضف الكود أدناه في ملف typeDefs.js:
مقدار ثابت {gql} = يتطلب("خادم أبولو");
مقدار ثابت typeDefs = gql`
اكتب الموظف {
فعلتُ!
اسم: خيط
قسم: خيط
مرتب: خيط
}
إدخال موظف إدخال {
اسم: خيط
قسم: خيط
مرتب: خيط
}
اكتب الاستعلام {
getEmployee (المعرف: ID): الموظف #يعود الموظف حسب المعرف
الموظفون: [الموظف] #يعود مجموعة مصفوفة ل موظفين
}
اكتب الطفرة {
createEmployee (إدخال الموظف: EmployeeInput): الموظف
updateEmployee (المعرف: ID، إدخال الموظف: EmployeeInput): قيمة منطقية
حذف الموظف (المعرف: المعرف): قيمة منطقية
}
`;
وحدة.exports = typeDefs ؛
يستخدم هذا الرمز أعلاه gql الوظيفة التي توفرها حزمة خادم أبولو لإنشاء مخطط GraphQL لبيانات الموظف.
يتكون المخطط من أربعة عناصر رئيسية: أنواع البيانات لمعلومات الموظف وأنواع الإدخال والاستعلامات والطفرات التي يمكن أن تؤديها واجهة برمجة التطبيقات.
حدد أدوات التحليل لواجهة برمجة تطبيقات GraphQL
وحدة الحل هي وظيفة GraphQL التي تحدد البيانات التي سيتم تمريرها عندما يرسل العميل استعلام واجهة برمجة التطبيقات لجلب البيانات. يتمثل دوره الأساسي بشكل أساسي في استرداد البيانات المطلوبة من مصدر البيانات المحدد وإعادتها إلى العميل.
أضف الكود أدناه إلى resolvers.js ملف في الرسم البياني مجلد. يتم تحديد أدوات الحل ، في هذه الحالة ، ضمن كائنات الاستعلام والطفرة.
يحدد كائن الاستعلام طريقتين: موظفين و getEmployee. هذه الطرق مسؤولة عن جلب بيانات الموظف من قاعدة البيانات بناءً على طلب العميل.
مقدار ثابت الموظف = يتطلب("../models/employeesModel");// محللات GraphQL
مقدار ثابت محللات = {
استفسار: {
موظفين: غير متزامن () => {
يحاول {
مقدار ثابت الموظفين = انتظر Employee.find ({}) ،
يعود موظفين؛
} يمسك (خطأ) {
وحدة التحكم. Error (error)؛
يرميجديدخطأ(فشل في إحضار الموظفين);
}
},
get الموظف: غير متزامن (الأصل ، args) => {
يحاول {
مقدار ثابت موظف = انتظر Employee.findById (args.id) ؛
يعود موظف؛
} يمسك (خطأ) {
وحدة التحكم. Error (error)؛
يرميجديدخطأ("فشل إحضار الموظف برقم التعريف");
}
},
},
كائن الطفرة له ثلاث طرق: خلق الموظف, تحديث الموظف، و حذف الموظف. تقوم هذه الطرق بإجراء تغييرات على البيانات المخزنة في قاعدة بيانات MongoDB.
طفره: {
غير متزامن createEmployee (_، { إدخال الموظف: {الاسم ، القسم ، الراتب}}) {
مقدار ثابت موظف جديد = جديد موظف({
اسم اسم،
القسم: القسم ،
الراتب: الراتب
});مقدار ثابت استجابة = انتظر newEmployee.save () ؛
وحدة التحكم.log (newEmployee) ؛يعود {
المعرّف: response._id ،
... رد ._doc
}
},غير متزامن updateEmployee (_، {id، إدخال الموظف: {الاسم ، القسم ، الراتب}}) {
مقدار ثابت updatedEmployee = انتظر Employee.updateOne (
{ _بطاقة تعريف: بطاقة تعريف }،
{الاسم ، القسم ، الراتب}
);لو (! updatedEmployee) {
يرميجديدخطأ(الموظف مع الهوية: $ {id} غير موجود);
}يعودحقيقي; // إرجاع قيمة منطقية تشير إلى نجاح التحديث
},غير متزامن deleteEmployee (_، {id}) {
مقدار ثابت تم حذف الموظف = انتظر Employee.deleteOne ({ _بطاقة تعريف: بطاقة تعريف })؛
لو (! تم حذف الموظف || تم حذفه 0) {
يرميجديدخطأ(الموظف مع الهوية $ {id} غير موجود);
}يعودحقيقي; // إرجاع قيمة منطقية تشير إلى نجاح الحذف
},
},
};
وحدة.exports = resolvers؛
أخيرًا ، قم بتشغيل هذا الأمر لتدوير الخادم:
index.js العقدة
بمجرد إنشاء اتصال قاعدة البيانات ، سيبدأ الخادم على المنفذ 5000.
يمكنك المضي قدمًا واختبار وظائف واجهة برمجة تطبيقات GraphQL عن طريق إجراء طلبات HTTP من ملعب GraphQL في متصفحك.
على سبيل المثال ، يمكنك استخدام ملف خلق الموظف طفرة لإضافة بيانات موظف جديد في قاعدة بيانات MongoDB.
شهرة GraphQL في مجتمع المطورين
تكتسب GraphQL زخمًا في مجتمع المطورين كنهج بديل لتصميم واجهة برمجة التطبيقات لمعمارية REST الشائعة.
ويرجع ذلك إلى قدرتها على توفير طريقة أكثر مرونة وكفاءة لاسترداد البيانات من مصادر مختلفة ، وكل ذلك من نقطة إدخال واحدة. هذا يتجنب الاضطرار إلى إدارة نقاط نهاية متعددة لبيانات مختلفة ، وهي مشكلة شائعة في بنية REST API. يعمل حل التصميم هذا على تبسيط عملية إنشاء واجهات برمجة التطبيقات الخلفية وإدارتها.