JSON এবং REST API Integration

Web Development with Rust (ওয়েব ডেভেলপমেন্ট) - রাস্ট (Rust) - Computer Programming

284

JSON কী?

JSON (JavaScript Object Notation) একটি জনপ্রিয় ডেটা বিনিময় ফরম্যাট যা মানব-পাঠযোগ্য এবং সহজে পার্স করা যায়। এটি সাধারণত ওয়েব সার্ভিস বা API-এর মধ্যে ডেটা আদান-প্রদান করার জন্য ব্যবহৃত হয়। JSON-এর সাধারণ কাঠামো হলো কিজ-ভ্যালু পেয়ার, অ্যারে, বুলিয়ান, সংখ্যা, স্ট্রিং এবং null।

JSON উদাহরণ:

{
  "name": "John Doe",
  "age": 30,
  "email": "john.doe@example.com",
  "is_verified": true,
  "friends": ["Alice", "Bob", "Charlie"]
}

REST API কী?

REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিসের মধ্যে ডেটা আদান-প্রদান করতে ব্যবহৃত হয়। REST API মূলত HTTP প্রোটোকল ব্যবহার করে, এবং সাধারণত JSON অথবা XML ফরম্যাটে ডেটা ফেরত দেয়। REST API-এর মধ্যে সাধারণ HTTP মেথডগুলো হলো:

  1. GET: রিসোর্স পড়া।
  2. POST: নতুন রিসোর্স তৈরি করা।
  3. PUT: একটি রিসোর্স সম্পূর্ণরূপে আপডেট করা।
  4. PATCH: একটি রিসোর্সের অংশবিশেষ আপডেট করা।
  5. DELETE: একটি রিসোর্স মুছে ফেলা।

Rust-এ JSON এবং REST API Integration

Rust-এ JSON ডেটা প্রসেস করতে এবং REST API-এর সাথে যোগাযোগ করার জন্য সাধারণত দুটি জনপ্রিয় লাইব্রেরি ব্যবহৃত হয়:

  1. serde: JSON (এবং অন্যান্য ফরম্যাট) পার্সিং এবং সিরিয়ালাইজেশন/ডিসিরিয়ালাইজেশন।
  2. reqwest: HTTP ক্লায়েন্ট লাইব্রেরি যা API কল করার জন্য ব্যবহৃত হয়।

১. Cargo.toml ফাইলে ডিপেন্ডেন্সি যোগ করা

প্রথমে আপনার Cargo.toml ফাইলে serde এবং reqwest লাইব্রেরি যোগ করতে হবে:

[dependencies]
reqwest = "0.11"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tokio = { version = "1", features = ["full"] }
  • reqwest: HTTP অনুরোধ করার জন্য ব্যবহৃত হবে।
  • serde এবং serde_json: JSON ডেটা সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করার জন্য।
  • tokio: অ্যাসিনক্রোনাস ফাংশন চালানোর জন্য।

২. HTTP GET অনুরোধ করা

এখন একটি HTTP GET অনুরোধ তৈরি করি যা একটি REST API থেকে JSON ডেটা নিয়ে আসবে এবং তা পার্স করবে।

use reqwest::Error;
use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct User {
    name: String,
    age: u32,
    email: String,
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    // API URL
    let url = "https://api.example.com/user/1";
    
    // GET অনুরোধ করা
    let response = reqwest::get(url).await?;
    
    // JSON ডেটা পার্স করা
    let user: User = response.json().await?;
    
    // ফলাফল প্রিন্ট করা
    println!("Name: {}, Age: {}, Email: {}", user.name, user.age, user.email);
    
    Ok(())
}

এখানে:

  • reqwest::get(url) দিয়ে GET অনুরোধ করা হয়েছে।
  • response.json().await? মাধ্যমে API থেকে প্রাপ্ত JSON ডেটা পার্স করা হয়েছে এবং User স্ট্রাকচারে জমা করা হয়েছে।

৩. HTTP POST অনুরোধ করা

এখন একটি POST অনুরোধ করা যাক, যেখানে JSON ডেটা পাঠানো হবে। ধরুন, আমরা একটি নতুন ব্যবহারকারীর তথ্য API-এ পাঠাতে চাই।

use reqwest::Client;
use serde::Serialize;

#[derive(Serialize)]
struct NewUser {
    name: String,
    age: u32,
    email: String,
}

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
    let client = Client::new();
    let new_user = NewUser {
        name: "Jane Doe".to_string(),
        age: 25,
        email: "jane.doe@example.com".to_string(),
    };

    let res = client
        .post("https://api.example.com/users")
        .json(&new_user)  // JSON ডেটা পাঠানো
        .send()
        .await?;

    println!("Response: {}", res.status());
    Ok(())
}

এখানে:

  • NewUser স্ট্রাকচারটি JSON ডেটাতে রূপান্তরিত হয়েছে।
  • .json(&new_user) মেথডের মাধ্যমে সেই JSON ডেটা API-এ পাঠানো হয়েছে।

৪. Error Handling

যেহেতু API-এ ত্রুটি হতে পারে, তাই ত্রুটি হ্যান্ডলিং গুরুত্বপূর্ণ। উপরের কোডে .await? এর মাধ্যমে যদি কোনো ত্রুটি ঘটে তবে তা যথাযথভাবে হ্যান্ডেল হবে এবং Rust ত্রুটির ধরন জানাবে।

৫. Authentication (Authentication Token)

অনেক API-তে সুরক্ষা ব্যবস্থা থাকে, যেমন Bearer token প্রমাণীকরণের জন্য। এ ধরনের API-এ অনুরোধ করার সময় আপনাকে হেডারে প্রমাণীকরণ টোকেন যোগ করতে হবে।

let res = client
    .get("https://api.example.com/protected_data")
    .header("Authorization", "Bearer YOUR_TOKEN_HERE")
    .send()
    .await?;

এখানে, Authorization হেডারটি API-এ প্রমাণীকরণ টোকেন পাঠানোর জন্য ব্যবহৃত হয়েছে।


সারাংশ

Rust-এ JSON এবং REST API Integration খুবই সহজ এবং কার্যকরী। আপনি serde লাইব্রেরির মাধ্যমে JSON ডেটা সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করতে পারেন এবং reqwest ব্যবহার করে HTTP অনুরোধ পাঠাতে পারেন। আপনি GET, POST, PUT, DELETE ইত্যাদি HTTP মেথড ব্যবহার করে API-র সাথে যোগাযোগ করতে পারেন। Rust-এ অ্যাসিনক্রোনাস ফাংশন ব্যবহারের জন্য tokio টুলকিট ব্যবহার করা হয়, যা I/O ব্লকিং কমিয়ে দেয় এবং পারফরম্যান্স উন্নত করে।

Content added By
Promotion

Are you sure to start over?

Loading...