مكتبة GraphQL في Kotlin: دليل كامل للعمل مع API
GraphQL هي لغة استعلام لواجهات API تتيح للعملاء طلب البيانات التي يحتاجونها فقط. في نظام Kotlin البيئي، توجد عدة مكتبات قوية للعمل مع GraphQL. في هذه المقالة، سنستعرض بالتفصيل ثلاث مكتبات رئيسية: graphql-kotlin، Apollo Kotlin و KGraphQL، مع أمثلة على استخدامها.
1. graphql-kotlin — مكتبة خادم من مجموعة Expedia
graphql-kotlin هي المكتبة الأكثر شيوعًا لإنشاء خوادم GraphQL في Kotlin. تدعم بشكل كامل جميع ميزات مواصفات GraphQL وتتكامل بشكل ممتاز مع أطر العمل Spring Boot و Ktor و Micronaut.
التثبيت والإعداد
لإضافة المكتبة، أضف التبعية في ملف build.gradle.kts:
dependencies { // المكتبة الأساسية implementation("com.expediagroup:graphql-kotlin-spring-server:6.5.0") // لتوليد المخطط من التعليقات التوضيحية implementation("com.expediagroup:graphql-kotlin-schema-generator:6.5.0")}إنشاء API GraphQL بسيط
لنحدد نموذج البيانات و resolver للاستعلامات:
// نموذج البياناتdata class User(val id: Int, val name: String, val email: String)
// Query resolverclass UserQuery : Query { fun getUser(id: Int): User? { return users.find { it.id == id } } companion object { val users = listOf( User(1, "آنا بيتروفا", "anna@example.com"), User(2, "إيفان سيدوروف", "ivan@example.com") ) }}
// Mutation resolverclass UserMutation : Mutation { fun createUser(name: String, email: String): User { val newUser = User(users.size + 1, name, email) users.add(newUser) return newUser }}الآن، سجل resolvers في إعدادات Spring Boot:
@Configurationclass GraphQLConfig { @Bean fun userQuery(): UserQuery = UserQuery() @Bean fun userMutation(): UserMutation = UserMutation()}الاستعلامات إلى API
مثال على استعلام GraphQL:
query { getUser(id: 1) { name email }}سيحتوي الرد على الحقول المطلوبة فقط:
{ "data": { "getUser": { "name": "آنا بيتروفا", "email": "anna@example.com" } }}2. Apollo Kotlin — مكتبة عميل لنظام Android و JVM
Apollo Kotlin هو عميل GraphQL قوي، مصمم خصيصًا لـ Kotlin و Android. يوفر استعلامات آمنة من حيث النوع وتوليدًا تلقائيًا للكود.
إضافة المكتبة
dependencies { implementation("com.apollographql.apollo:apollo-runtime:3.8.0") implementation("com.apollographql.apollo:apollo-normalized-cache-sqlite:3.8.0")}إنشاء استعلام
أولاً، حدد استعلام GraphQL في ملف GetUserQuery.graphql:
query GetUser($id: Int!) { getUser(id: $id) { id name email }}ثم استخدم الكود المُولّد في Kotlin:
val apolloClient = ApolloClient.builder() .serverUrl("http://localhost:8080/graphql") .build()
suspend fun fetchUser(userId: Int): User? { val response = apolloClient .query(GetUserQuery(userId)) .execute() return response.data?.getUser?.let { user -> User( id = user.id, name = user.name, email = user.email ) }}3. KGraphQL — مكتبة خفيفة الوزن لـ Ktor
KGraphQL هي مكتبة بسيطة لإنشاء خوادم GraphQL في تطبيقات Ktor. إنها