GraphQL और Kotlin का परिचय
GraphQL API के लिए एक क्वेरी भाषा है, जो क्लाइंट को केवल वही डेटा प्राप्त करने की अनुमति देती है जिसकी उन्हें वास्तव में आवश्यकता होती है। REST के विपरीत, जहां प्रत्येक एंडपॉइंट एक निश्चित संरचना लौटाता है, GraphQL लचीलापन प्रदान करता है: एक क्वेरी विभिन्न स्रोतों से डेटा को जोड़ सकती है। Kotlin, बदले में, JVM के लिए एक आधुनिक भाषा है, जो संक्षिप्तता और टाइप सुरक्षा को जोड़ती है। इस ट्यूटोरियल में, हम Kotlin और graphql-kotlin-spring-server लाइब्रेरी का उपयोग करके एक पूर्ण GraphQL API बनाएंगे।
आप सीखेंगे कि प्रोजेक्ट कैसे सेट करें, स्कीमा कैसे परिभाषित करें, रिज़ॉल्वर कैसे लिखें और GraphiQL के माध्यम से API का परीक्षण कैसे करें। तैयार हैं? चलिए शुरू करते हैं!
1. प्रोजेक्ट सेटअप
1.1. Spring Boot एप्लिकेशन बनाना
शुरू करने के लिए, Spring Initializr पर एक नया प्रोजेक्ट बनाएं। चुनें:
- Project: Gradle (Kotlin)
- Language: Kotlin
- Spring Boot: 3.2+
- Dependencies: Spring Web, Spring Boot DevTools
डाउनलोड करने के बाद, build.gradle.kts में GraphQL के लिए डिपेंडेंसी जोड़ें:
dependencies { implementation("com.expediagroup:graphql-kotlin-spring-server:7.0.0") implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") testImplementation("org.springframework.boot:spring-boot-starter-test")}1.2. एप्लिकेशन कॉन्फ़िगरेशन
src/main/resources में application.yml फ़ाइल बनाएं:
server: port: 8080
graphql: packages: - "com.example.graphql.demo"यह Spring Boot को रिज़ॉल्वर और टाइप खोजने के लिए पैकेज com.example.graphql.demo को स्कैन करने का निर्देश देगा।
2. GraphQL स्कीमा परिभाषित करना
2.1. डेटा मॉडल बनाना
पुस्तक और लेखक के लिए एक सरल मॉडल बनाते हैं। Kotlin में data class का उपयोग करें:
// src/main/kotlin/com/example/graphql/demo/model/Book.ktpackage com.example.graphql.demo.model
data class Book( val id: String, val title: String, val author: Author, val year: Int)
data class Author( val id: String, val name: String, val books: List<Book> = emptyList())2.2. कोड के माध्यम से स्कीमा परिभाषित करना (SDL)
schema.graphqls फ़ाइल लिखने के बजाय, हम @GraphQLDescription और @GraphQLIgnore एनोटेशन का उपयोग करेंगे। graphql-kotlin लाइब्रेरी क्लास के आधार पर स्वचालित रूप से स्कीमा उत्पन्न करती है। हालांकि, स्पष्टता के लिए src/main/resources में schema.graphqls फ़ाइल बनाएं:
type Query { books: [Book!]! book(id: String!): Book authors: [Author!]!}
type Mutation { addBook(title: String!, authorId: String!, year: Int!): Book!}
type Book { id: String! title: String! author: Author! year: Int!}
type Author { id: String! name: String! books: [Book!]!}3. रिज़ॉल्वर का कार्यान्वयन
3.1. डेटा संग्रहण के लिए सेवा
सरलता के लिए, हम in-memory स्टोरेज का उपयोग करेंगे:
// src/main/kotlin/com/example/graphql/demo/service/LibraryService.ktpackage com.example.graphql.demo.service
import com.example.graphql.demo.model.Authorimport com.example.graphql.demo.model.Bookimport org.springframework.stereotype.Serviceimport java.util.UUID
@Serviceclass LibraryService { private val authors = mutableListOf( Author(id = "1", name = "जॉर्ज ऑरवेल"), Author(id = "2", name = "रे ब्रैडबरी") )
private val books = mutableListOf( Book(id = "1", title = "1984", author = authors[0], year = 1949), Book(id = "2", title = "451° फारेनहाइट", author = authors[1], year = 1953) )
fun getBooks(): List<Book> = books