Rust के साथ GraphQL API: शुरुआती लोगों के लिए चरण-दर-चरण ट्यूटोरियल

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust पर GraphQL API का परिचय

\n

आधुनिक वेब डेवलपमेंट में लचीले और उच्च-प्रदर्शन वाले API की आवश्यकता होती है। GraphQL एक क्वेरी भाषा है जो क्लाइंट को बिना किसी अतिरिक्तता के केवल वही डेटा प्राप्त करने की अनुमति देती है जिसकी उन्हें आवश्यकता है। Rust, बदले में, उच्च प्रदर्शन और मेमोरी सुरक्षा प्रदान करता है। इस ट्यूटोरियल में, हम async-graphql लाइब्रेरी का उपयोग करके Rust पर एक सरल लेकिन पूर्ण GraphQL सर्वर बनाएंगे। आप प्रोजेक्ट सेट अप करना, डेटा प्रकार परिभाषित करना, रिज़ॉल्वर लिखना और सर्वर चलाना सीखेंगे। यह लेख उन शुरुआती डेवलपर्स के लिए है जो Rust की मूल बातों से परिचित हैं।

\n\n

प्रोजेक्ट सेटअप और निर्भरताएँ स्थापित करना

\n

आरंभ करने के लिए, Cargo का उपयोग करके एक नया Rust प्रोजेक्ट बनाएँ:

\n
cargo new graphql-rust-tutorial\ncd graphql-rust-tutorial
\n

Cargo.toml फ़ाइल खोलें और निम्नलिखित निर्भरताएँ जोड़ें:

\n
[dependencies]\nasync-graphql = "7.0"\nasync-graphql-actix-web = "7.0"\nactix-web = "4"\nserde = { version = "1.0", features = ["derive"] }\ntokio = { version = "1", features = ["full"] }
\n

लाइब्रेरी के चयन की व्याख्या:

\n
    \n
  • async-graphql — Rust में GraphQL के साथ काम करने के लिए मुख्य लाइब्रेरी।
  • \n
  • async-graphql-actix-web — Actix-web वेब फ्रेमवर्क के साथ एकीकरण।
  • \n
  • actix-web — एक लोकप्रिय एसिंक्रोनस HTTP सर्वर।
  • \n
  • serde — डेटा के सीरियलाइज़ेशन/डीसीरियलाइज़ेशन के लिए।
  • \n
  • tokio — एसिंक्रोनस रनटाइम।
  • \n
\n

यह सुनिश्चित करने के लिए cargo build चलाएँ कि सभी निर्भरताएँ सही ढंग से स्थापित हैं।

\n\n

GraphQL स्कीमा और रिज़ॉल्वर को परिभाषित करना

\n

आइए एक सरल डेटा मॉडल बनाएँ — एक पुस्तक। हम क्वेरी और म्यूटेशन के लिए संरचना और रिज़ॉल्वर को परिभाषित करेंगे।

\n

डेटा मॉडल बनाना

\n

src/models.rs फ़ाइल बनाएँ और निम्नलिखित कोड जोड़ें:

\n
use async_graphql::*;\n\n#[derive(SimpleObject)]\npub struct Book {\n    pub id: ID,\n    pub title: String,\n    pub author: String,\n}\n\n#[derive(InputObject)]\npub struct NewBook {\n    pub title: String,\n    pub author: String,\n}
\n

यहाँ, SimpleObject स्वचालित रूप से Book संरचना के लिए एक GraphQL प्रकार उत्पन्न करता है, और InputObject म्यूटेशन इनपुट डेटा के लिए।

\n\n

स्टोरेज और रिज़ॉल्वर बनाना

\n

आइए src/resolvers.rs फ़ाइल बनाएँ, जिसमें क्वेरी और म्यूटेशन का तर्क होगा:

\n
use std::sync::Mutex;\nuse async_graphql::*;\nuse crate::models::{Book, NewBook};\n\npub struct QueryRoot;\n\n#[Object]\nimpl QueryRoot {\n    async fn books(&self) -> Vec<Book> {\n        let storage = STORAGE.lock().unwrap();\n        storage.clone()\n    }\n\n    async fn book(&self, id: ID) -> Option<Book> {\n        let storage = STORAGE.lock().unwrap();\n        storage.iter().find(|b| b.id == id).cloned()\n    }\n}\n\npub struct MutationRoot;\n\n#[Object]\nimpl MutationRoot {\n    async fn add_book(&self, input: NewBook) -> Book {\n        let mut storage = STORAGE.lock().unwrap();\n        let new_book = Book {\n            id: ID::from(format!("book_{}", storage.len() + 1)),\n            title: input.title,\n            author: input.author,\n        };\n        storage.push(new_book.clone());\n        new_book\n    }\n}\n\nlazy_static::lazy_static! {\n    static ref STORAGE: Mutex<Vec<Book>> = Mutex::new(vec![]);\n}
\n

ध्यान दें: हम स्टोरेज तक थ्रेड-सुरक्षित पहुँच के लिए Mutex का उपयोग कर रहे हैं। वास्तविक प्रोजेक्ट में डेटाबेस का उपयोग करना बेहतर होगा।

\n\n

स्कीमा का निर्माण

\n

अब src/main.rs फ़ाइल में सब कुछ संयोजित करें:

\n
use actix_web::{web, App, HttpServer, HttpResponse, middleware};\nuse async_graphql::{http::GraphiQLSource, EmptySubscription, Schema};\nuse async_graphql_actix_web::{GraphQLRequest, GraphQLResponse};\nuse std::sync::Arc;\n\nmod models;\nmod resol                

ब्लॉग

पुस्तक अनुशंसाएँ