REST API ও API Call

লেসন ৪২ / ৪৪

API কী?

API (Application Programming Interface) হলো একটি ইন্টারফেস যার মাধ্যমে দুটি সফটওয়্যার যোগাযোগ করে। Web API সাধারণত HTTP ব্যবহার করে JSON ডেটা বিনিময় করে।

API-র প্রকারভেদ

  • REST API — সবচেয়ে জনপ্রিয়, HTTP methods ব্যবহার করে
  • GraphQL — নতুন, client বলে কী কী ডেটা দরকার
  • SOAP — পুরনো, XML ভিত্তিক
  • WebSocket — real-time, দ্বি-মুখী

REST (Representational State Transfer)

REST হলো কিছু নীতির সমষ্টি যা API ডিজাইনের নিয়ম ঠিক করে।

REST-এর মূল নীতি

  • Resource-based URL — /users, /posts/42/comments
  • HTTP Methods — GET, POST, PUT, PATCH, DELETE
  • Stateless — প্রতিটি request স্বাধীন
  • JSON response — ডেটা বিনিময়ের ভাষা
  • Status Codes — 200, 201, 404, 500

REST API Endpoint Design

GET    /users            → সব user
GET    /users/42          → id 42 এর user
POST   /users             → নতুন user তৈরি
PUT    /users/42          → user 42 পুরোপুরি update
PATCH  /users/42          → user 42 আংশিক update
DELETE /users/42          → user 42 মুছে ফেলা

GET    /users/42/posts    → user 42 এর সব post
POST   /users/42/posts    → user 42 এর জন্য নতুন post

বাস্তব API Call — JSONPlaceholder

Free public API: https://jsonplaceholder.typicode.com

// সব post
fetch("https://jsonplaceholder.typicode.com/posts")
    .then(r => r.json())
    .then(posts => console.log(posts));

// নির্দিষ্ট post
fetch("https://jsonplaceholder.typicode.com/posts/1")
    .then(r => r.json())
    .then(post => console.log(post));

// নতুন post
fetch("https://jsonplaceholder.typicode.com/posts", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
        title: "আমার পোস্ট",
        body: "এটি একটি টেস্ট",
        userId: 1
    })
}).then(r => r.json()).then(data => console.log(data));

API Authentication

// ১. API Key (query param)
fetch(`https://api.example.com/data?api_key=${KEY}`);

// ২. API Key (header)
fetch("https://api.example.com/data", {
    headers: { "X-API-Key": "your-key-here" }
});

// ৩. Bearer Token (JWT)
fetch("https://api.example.com/profile", {
    headers: {
        "Authorization": `Bearer ${token}`
    }
});

// ৪. Basic Auth
fetch(url, {
    headers: {
        "Authorization": "Basic " + btoa("user:pass")
    }
});

CORS (Cross-Origin Resource Sharing)

Browser নিরাপত্তার জন্য অন্য domain-এর API কল block করে, যদি সেই server CORS header না পাঠায়।

// Server (PHP) এ CORS enable
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Authorization");

Error Handling ভালোভাবে

async function callApi(url, options) {
    try {
        const res = await fetch(url, options);

        if (!res.ok) {
            const errData = await res.json().catch(() => ({}));
            throw new Error(errData.message || `HTTP ${res.status}`);
        }

        return await res.json();
    } catch (err) {
        if (err.name === "TypeError") {
            console.error("Network error — ইন্টারনেট চেক করুন");
        } else {
            console.error("API ভুল:", err.message);
        }
        throw err;
    }
}

// ব্যবহার
try {
    const users = await callApi("/api/users");
    renderUsers(users);
} catch (err) {
    showError(err.message);
}

জনপ্রিয় Free APIs

  • JSONPlaceholder — Fake REST API (testing)
  • OpenWeatherMap — আবহাওয়া
  • TMDB — সিনেমা ও টিভি
  • GitHub API — GitHub ডেটা
  • REST Countries — দেশের তথ্য
  • NewsAPI — সংবাদ