مكتبات 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// }