GraphQL لكوتلن: مكتبات قوية لإنشاء واجهات برمجة التطبيقات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبات GraphQL لكوتلن: نظرة عامة شاملة ودليل عملي



GraphQL هي لغة استعلام لواجهات برمجة التطبيقات (API) تتيح للعملاء الحصول على البيانات التي يحتاجونها فقط. يوجد في بيئة كوتلن العديد من المكتبات القوية للعمل مع GraphQL، سواء على جانب الخادم أو جانب العميل. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: graphql-kotlin وKGraphQL وApollo Kotlin، وسنعرض أمثلة على استخدامها.



1. graphql-kotlin — المكتبة الرسمية من مجموعة Expedia



graphql-kotlin هي المكتبة الأكثر نضجًا والتي تحظى بدعم جيد لإنشاء خوادم GraphQL بلغة كوتلن. تستخدم هذه المكتبة إمكانيات اللغة بشكل كامل، مثل coroutines وفئات البيانات (data classes) وأمان القيم الفارغة (null-safety).



الميزات الرئيسية:

  • دعم coroutines في كوتلن للمعالجة غير المتزامنة
  • توليد تلقائي للمخطط (schema) من فئات البيانات
  • دعم مدمج للاشتراكات (Subscriptions) عبر WebSocket
  • التكامل مع Spring Boot وKtor وأطر العمل الأخرى
  • دعم كامل لمواصفات GraphQL (يونيو 2018)


مثال على خادم باستخدام graphql-kotlin:

// تعريف نموذج البياناتdata class User(val id: String, val name: String, val email: String)

// إنشاء محلل الاستعلام (Query resolver)class UserQuery : Query { fun getUser(id: String): User? { // منطق الحصول على المستخدم return User(id = "1", name = "إيفان بيتروف", email = "ivan@example.com") } fun users(): List<User> = listOf( User("1", "إيفان", "ivan@example.com"), User("2", "ماريا", "maria@example.com") )}

// إعداد وتشغيل الخادمfun main() { val schema = Schema { query(UserQuery()) } val server = GraphQLServer(schema) server.start(port = 8080)}


مثال على استعلام من العميل:

query {  user(id: "1") {    name    email  }}


2. KGraphQL — بديل خفيف الوزن



KGraphQL هي مكتبة بسيطة لإنشاء GraphQL API. تتميز بسهولة الإعداد وعدم وجود تبعيات غير ضرورية.



الميزات الرئيسية:

  • حجم صغير جدًا — حوالي 100 كيلوبايت
  • لا تتطلب Spring Boot أو أطر عمل ثقيلة أخرى
  • دعم DSL لتعريف المخطط
  • إمكانية التكامل مع أي خادم HTTP


مثال على استخدام KGraphQL:

// تعريف النموذجdata class Product(val id: Int, val title: String, val price: Double)

// إنشاء مخطط GraphQLval schema = schema { query("products") { resolver { -> listOf( Product(1, "لابتوب", 89999.99), Product(2, "فأرة", 2499.50) ) } } query("product") { resolver { id: Int -> Product(id, "منتج #$id", 1000.0) } }}

// تشغيل الخادمfun main() { val server = KGraphQLServer(schema) server.start(port = 4000)}


3. Apollo Kotlin — مكتبة العميل من Apollo



Apollo Kotlin هو عميل قوي للعمل مع GraphQL API. يقوم بتوليد كود آمن من حيث الأنواع (type-safe) بناءً على مخطط GraphQL، مما يبسط التطوير بشكل كبير.



مزايا Apollo Kotlin:

  • توليد كود Kotlin من ملفات .graphql
  • دعم التخزين المؤقت (ذاكرة تخزين مؤقت طبيعية)
  • العمل مع coroutines وFlow
  • معالجة تلقائية للأخطاء
  • دعم التعديلات (mutations) والاستعلامات (queries) والاشتراكات (subscriptions)


مثال على استخدام Apollo Kotlin على العميل:

// أولاً، نحدد الاستعلام في ملف .graphql// file: GetUser.graphql// query GetUser($id: ID!) {//   user(id: $id) {//     id//     name//     email//   }                    

توصيات