30 मिनट में Rust पर REST API कैसे लिखें: शुरुआती लोगों के लिए

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

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

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

परिचय: REST API के लिए Rust क्यों?

\n

Rust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है, जो C++ के प्रदर्शन और मेमोरी सुरक्षा को जोड़ती है। हाल के वर्षों में, यह उच्च-लोड वेब सेवाओं के निर्माण के लिए एक लोकप्रिय विकल्प बन गया है। यदि आप पहले से Python से परिचित हैं और कुछ नया आज़माना चाहते हैं, तो Rust एक बेहतरीन कदम होगा।

\n

इस लेख में, हम Actix-web फ्रेमवर्क का उपयोग करके Rust पर कार्य सूची (Todo List) प्रबंधित करने के लिए एक पूर्ण REST API बनाएंगे। यदि आप निर्देशों का पालन करते हैं, तो पूरी प्रक्रिया में 30 मिनट से अधिक नहीं लगेगा।

\n\n

1. वातावरण तैयार करना

\n

Rust स्थापित करना

\n

यदि आपने अभी तक Rust स्थापित नहीं किया है, तो टर्मिनल (Linux/macOS) में निम्न कमांड चलाएँ:

\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n

Windows के लिए, आधिकारिक साइट से इंस्टॉलर डाउनलोड करें।

\n

स्थापना के बाद, संस्करण जाँचें:

\n
rustc --version
\n\n

प्रोजेक्ट बनाना

\n

Cargo - Rust के पैकेज मैनेजर का उपयोग करके एक नया प्रोजेक्ट बनाएँ:

\n
cargo new rust_todo_api\ncd rust_todo_api
\n\n

निर्भरताएँ जोड़ना

\n

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

\n
[dependencies]\nactix-web = "4"\nactix-rt = "2"\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"\ntokio = { version = "1", features = ["full"] }
\n

फ़ाइल सहेजें। पहली बार बिल्ड करने पर Cargo स्वचालित रूप से सभी लाइब्रेरी डाउनलोड करेगा।

\n\n

2. डेटा मॉडल और स्टोरेज बनाना

\n

एंडपॉइंट लिखने से पहले, डेटा संरचना को परिभाषित करें। हम प्रदर्शन के लिए मेमोरी में एक सरल वेक्टर का उपयोग करेंगे।

\n\n

कार्य मॉडल

\n

फ़ाइल src/models.rs बनाएँ:

\n
use serde::{Deserialize, Serialize};\n\n#[derive(Debug, Serialize, Deserialize, Clone)]\npub struct Task {\n    pub id: u32,\n    pub title: String,\n    pub completed: bool,\n}
\n\n

ग्लोबल स्टोरेज

\n

src/main.rs में ग्लोबल स्टेट जोड़ें। थ्रेड-सुरक्षा के लिए Mutex का उपयोग करें:

\n
use std::sync::Mutex;\nuse actix_web::{web, App, HttpServer, HttpResponse, HttpRequest, Responder};\nuse models::Task;\n\nmod models;\n\nstruct AppState {\n    tasks: Mutex<Vec<Task>>,\n    next_id: Mutex<u32>,\n}
\n\n

3. CRUD एंडपॉइंट का कार्यान्वयन

\n

अब मुख्य हैंडलर लिखें। ये सभी web::Data के माध्यम से एप्लिकेशन स्टेट प्राप्त करेंगे।

\n\n

GET /tasks — सभी कार्य प्राप्त करना

\n
async fn get_tasks(data: web::Data<AppState>) -> impl Responder {\n    let tasks = data.tasks.lock().unwrap();\n    HttpResponse::Ok().json(tasks.clone())\n}
\n\n

POST /tasks — नया कार्य बनाना

\n
async fn create_task(data: web::Data<AppState>, body: web::Json<Task>) -> impl Responder {\n    let mut tasks = data.tasks.lock().unwrap();\n    let mut next_id = data.next_id.lock().unwrap();\n    let new_task = Task {\n        id: *next_id,\n        title: body.title.clone(),\n        completed: false,\n    };\n    tasks.push(new_task.clone());\n    *next_id += 1;\n    HttpResponse::Created().json(new_task)\n}
\n\n

GET /tasks/{id} — ID द्वारा कार्य प्राप्त करना

\n
async fn get_task(data: web::Data<AppState>, path: web::Path<u32>) -> impl Responder {\n    let id = path.into_inner();\n    let tasks = data.tasks.lock().unwrap();\n    match tasks.iter().find(|t| t.id == id) {\n        Some(task) => HttpResponse::Ok().json(task),\n        None => HttpResponse::NotFound().json("Task not found"),\n    }\n}
\n\n

DELETE /tasks/{id} — कार्य हटाना

\n
async fn delete_task(data: web::Data<AppState>, path: web::Path<u32>) -> impl Responder {\n    let id = path.into_inner();\n    l                

ब्लॉग

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