परिचय: REST API के लिए Rust क्यों?
Rust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है जो C++ के प्रदर्शन और मेमोरी सुरक्षा को जोड़ती है। हाल के वर्षों में इसका उपयोग उच्च-लोड वेब सेवाओं और REST API बनाने के लिए सक्रिय रूप से किया जा रहा है। इस मार्गदर्शिका में हम 30 मिनट में Actix-web फ्रेमवर्क का उपयोग करके Rust पर एक पूर्ण REST API बनाएंगे।
REST API के लिए Rust को क्यों चुनें?
- प्रदर्शन: Rust नेटिव कोड में कंपाइल होता है और गार्बेज कलेक्टर का उपयोग नहीं करता, जो अनुरोध प्रसंस्करण की अधिकतम गति प्रदान करता है।
- सुरक्षा: स्वामित्व (ownership) और उधार (borrowing) प्रणाली मेमोरी से संबंधित त्रुटियों के पूरे वर्गों को समाप्त करती है।
- स्केलेबिलिटी: Actix-web दुनिया के सबसे तेज़ वेब फ्रेमवर्क में से एक है, जो प्रति सेकंड लाखों अनुरोधों को संभालने में सक्षम है।
लेख के अंत तक आपके पास कई एंडपॉइंट, त्रुटि प्रबंधन और आगे विस्तार के लिए संरचना वाला एक तैयार प्रोजेक्ट होगा।
चरण 1: प्रोजेक्ट सेटअप और निर्भरताएँ स्थापित करना
सबसे पहले एक नया Cargo प्रोजेक्ट बनाएं। टर्मिनल खोलें और निष्पादित करें:
cargo new rust_rest_apicd rust_rest_apiअब Cargo.toml फ़ाइल खोलें और निम्नलिखित निर्भरताएँ जोड़ें:
[dependencies]actix-web = "4"serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"tokio = { version = "1", features = ["full"] }uuid = { version = "1.0", features = ["v4", "serde"] }आइए समझें कि प्रत्येक लाइब्रेरी किसके लिए जिम्मेदार है:
- actix-web — HTTP सर्वर बनाने के लिए मुख्य वेब फ्रेमवर्क।
- serde / serde_json — JSON प्रारूप में डेटा का सीरियलाइज़ेशन और डीसीरियलाइज़ेशन।
- tokio — Actix के काम करने के लिए आवश्यक एसिंक्रोनस रनटाइम।
- uuid — हमारी संस्थाओं के लिए अद्वितीय पहचानकर्ता उत्पन्न करना।
सभी निर्भरताएँ लोड करने के लिए cargo build निष्पादित करें। पहली बार चलाने में कुछ समय लगेगा।
चरण 2: डेटा मॉडल और स्टोरेज बनाना
हमारा API कार्यों की सूची (TODO-एप्लिकेशन) प्रबंधित करेगा। एक सरल मॉडल बनाएं। src/main.rs खोलें और निम्नलिखित कोड जोड़ें:
use actix_web::{web, App, HttpServer, HttpResponse, middleware::Logger};use serde::{Deserialize, Serialize};use std::sync::Mutex;use uuid::Uuid;
// कार्य का मॉडल#[derive(Debug, Serialize, Deserialize, Clone)]struct Task { id: Uuid, title: String, completed: bool,}
// कार्य बनाने का अनुरोध#[derive(Debug, Deserialize)]struct CreateTaskRequest { title: String,}
// कार्यों का भंडार (मेमोरी में)struct AppState { tasks: Mutex>,} हम डेटा तक थ्रेड-सुरक्षित पहुँच के लिए Mutex का उपयोग कर रहे हैं। वास्तविक प्रोजेक्ट में आप इसे डेटाबेस से बदल देंगे, लेकिन प्रदर्शन के लिए यह विकल्प उपयुक्त है।
अब एप्लिकेशन की स्थिति को आरंभ करने के लिए एक फ़ंक्शन जोड़ें:
fn init_tasks() -> Vec { vec![ Task { id: Uuid::new_v4(), title: "Rust सीखें".to_string(), completed: false, }, Task { id: Uuid::new_v4(), title: "REST API लिखें".to_string(), completed: true, }, ]} चरण 3: CRUD एंडपॉइंट का कार्यान्वयन
अब हमारे REST API के लिए मुख्य हैंडलर बनाएं। मॉडल घोषणाओं के बाद निम्नलिखित कोड जोड़ें:
GET /tasks — सभी कार्यों की सूची प्राप्त करना
async fn get_tasks(data: web::Data<AppState>) -> HttpResponse { let tasks = data.tasks.lock().unwrap(); HttpResponse::Ok().json(tasks.clone())}POST /tasks — नया कार्य बनाना
async fn create_task( data: web::Dat