परिचय: GraphQL और Kotlin क्यों?
\nआधुनिक वेब डेवलपमेंट की दुनिया में, API बनाने के लिए सही दृष्टिकोण चुनना पूरे प्रोजेक्ट की सफलता निर्धारित कर सकता है। Facebook द्वारा विकसित GraphQL, REST का एक लचीला विकल्प प्रदान करता है, जिससे क्लाइंट केवल उन डेटा का अनुरोध कर सकते हैं जिनकी उन्हें वास्तव में आवश्यकता है। और Kotlin, JVM के लिए एक आधुनिक प्रोग्रामिंग भाषा, इसमें संक्षिप्तता, null-सुरक्षा और कोरूटीन के लिए शक्तिशाली समर्थन जोड़ता है।
\nइस ट्यूटोरियल में, हम व्यावहारिक रूप से Kotlin और graphql-kotlin-spring-server फ्रेमवर्क का उपयोग करके एक पूर्ण GraphQL API बनाएंगे। आप सीखेंगे कि सर्वर कैसे सेट अप करें, डेटा स्कीमा को परिभाषित करें, रिज़ॉल्वर लिखें और API का परीक्षण करें। लेख के अंत तक, आप अपने Kotlin प्रोजेक्ट्स में GraphQL को स्वतंत्र रूप से शामिल कर पाएंगे।
1. प्रोजेक्ट सेटअप और निर्भरताएँ
\nशुरू करने के लिए, GraphQL समर्थन के साथ एक नया Spring Boot प्रोजेक्ट बनाएं। हम बिल्ड सिस्टम के रूप में Gradle का उपयोग करेंगे।
\n\n1.1. बेसिक स्ट्रक्चर बनाना
\nIntelliJ IDEA या Spring Initializr के माध्यम से एक नया प्रोजेक्ट बनाएं। build.gradle.kts में निम्नलिखित निर्भरताएँ जोड़ें:
plugins {\n id("org.springframework.boot") version "3.2.0"\n id("io.spring.dependency-management") version "1.1.4"\n kotlin("jvm") version "1.9.21"\n kotlin("plugin.spring") version "1.9.21"\n}\n\ndependencies {\n implementation("org.springframework.boot:spring-boot-starter-web")\n implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.1")\n implementation("org.jetbrains.kotlin:kotlin-reflect")\n implementation("org.jetbrains.kotlin:kotlin-stdlib")\n testImplementation("org.springframework.boot:spring-boot-starter-test")\n}\n\n1.2. एप्लिकेशन कॉन्फ़िगरेशन
\nsrc/main/resources में application.yml फ़ाइल बनाएं:
server:\n port: 8080\n\ngraphql:\n packages:\n - "com.example.graphqldemo"\n schema:\n introspection-enabled: true\n exception-handlers-enabled: true\nयह बेसिक कॉन्फ़िगरेशन है। पैरामीटर introspection-enabled: true परीक्षण के लिए GraphiQL का उपयोग करने की अनुमति देता है।
2. GraphQL स्कीमा परिभाषित करना
\ngraphql-kotlin में, स्कीमा आपकी डेटा क्लासेस (data classes) के आधार पर स्वचालित रूप से बनाई जाती है। यह मुख्य लाभों में से एक है — अलग SDL फ़ाइल लिखने की आवश्यकता नहीं है।
2.1. डेटा मॉडल बनाना
\nमान लें कि हम पुस्तकालय के लिए API बना रहे हैं। मॉडल परिभाषित करें:
\npackage com.example.graphqldemo.model\n\ndata class Book(\n val id: String,\n val title: String,\n val author: Author,\n val year: Int,\n val genre: String\n)\n\ndata class Author(\n val id: String,\n val name: String,\n val books: List<Book> = emptyList()\n)\n\n// म्यूटेशन के लिए इनपुट प्रकार\ndata class BookInput(\n val title: String,\n val authorId: String,\n val year: Int,\n val genre: String\n)\n\n2.2. डेटा के लिए सेवा
\nएक सरल in-memory सेवा बनाएं जो डेटा संग्रहीत करेगी:
\npackage com.example.graphqldemo.service\n\nimport com.example.graphqldemo.model.Author\nimport com.example.graphqldemo.model.Book\nimport com.example.graphqldemo.model.BookInput\nimport org.springframework.stereotype.Service\nimport java.util.UUID\n\n@Service\nclass LibraryService {\n private val authors = mutableListOf(\n Author("1", "जोआन राउलिंग"),\n Author("2", "जॉर्ज ऑरवेल")\n )\n private val books = mutableListOf(\n Book("1", "हैरी पॉटर और दार्शनिक का पत्थर", authors[0], 1997, "फंतासी"),\n Book("2", "1984", authors[1], 1949, "डिस्टोपिया")\n )\n\n fun getBooks(): List<Book> = books\n fun getBookById(id: String): Book? = books.find { it.id == id }\n fun getAuthors(): List<Author> = authors\n fun addBook(input: BookInput): Book {\n val author = authors.fin