RAJESTARY DIGITAL TECH • SECURITY • EDUCATION
دانش • فناوری • امنیت

دنیای تکنولوژی
از یادگیری شروع می‌شود

آموزش‌های کاربردی، برنامه‌نویسی، امنیت و فناوری برای ساختن، یادگرفتن و بهتر زندگی کردن با تکنولوژی.

LEARN BUILD SECURE CREATE

API نویسی حرفه‌ای (RESTful)؛ ساخت سرویس‌های وب مدرن و امن

API نویسی حرفه‌ای (RESTful)؛ ساخت سرویس‌های وب مدرن و امن

🌐 درس هشتم: API نویسی حرفه‌ای (RESTful)؛ ساخت سرویس‌های وب مدرن و امن

👋

سلام مهمان عزیز!

برای دسترسی به تمام محتوا و امکانات، وارد شوید.

🎯 هدف این درس: آشنایی با اصول طراحی API‌های RESTful، پیاده‌سازی احراز هویت با JWT (JSON Web Token)، مدیریت Rate Limiting برای جلوگیری از سوءاستفاده و مستندسازی استاندارد با Swagger.

مهمان عزیز! 👋
تا اینجا یاد گرفتی چطور داده‌ها را در دیتابیس ذخیره کنی و آن‌ها را در صفحات HTML نمایش دهی. اما در دنیای مدرن، وب‌سایت‌ها جزایر جداگانه نیستند؛ آن‌ها باید با اپلیکیشن‌های موبایل، سایت‌های دیگر و سرویس‌های خارجی ارتباط برقرار کنند.

زبان مشترک این ارتباط API است. اما هر APIای خوب نیست. یک API حرفه‌ای باید استاندارد (RESTful)، امن (با توکن‌های JWT) و پایدار (با محدودیت درخواست) باشد. در این درس تمام این موارد را پوشش می‌دهیم.

💡 چرا REST و JWT؟

۱. REST: استانداردی که باعث می‌شود API شما برای همه توسعه‌دهندگان قابل فهم و پیش‌بینی باشد.
۲. JWT: روشی Stateless (بدون وضعیت) برای احراز هویت که برای اپلیکیشن‌های موبایل و SPAها عالی است و بار سرور را کاهش می‌دهد.


1️⃣ اصول اولیه RESTful

در معماری REST، ما از متدهای HTTP برای انجام عملیات روی منابع (Resources) استفاده می‌کنیم. به جای اینکه آدرس‌های عجیب و غریب بسازیم، از ساختار استاندارد استفاده می‌کنیم.

متد HTTP کاربرد مثال URL
GET دریافت اطلاعات /api/users
POST ایجاد منبع جدید /api/users
PUT بروزرسانی کامل /api/users/1
DELETE حذف منبع /api/users/1

2️⃣ ساختار پاسخ استاندارد JSON

یک API حرفه‌ای نباید فقط داده خام بفرستد. باید وضعیت (Status Code)، پیام و داده را در یک ساختار منظم برگرداند.



📦
ApiResponse.php

PHP
8.x



<?php
function sendResponse($data, $message = '', $status = 200) {
    header('Content-Type: application/json');
    http_response_code($status);
    
    $response = [
        'success' => $status >= 200 && $status < 300,
        'message' => $message,
        'data' => $data
    ];
    
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    exit;
}

3️⃣ احراز هویت با JWT (JSON Web Token)

به جای Session، از توکن‌های JWT استفاده می‌کنیم. وقتی کاربر لاگین می‌کند، یک توکن امضا شده دریافت می‌کند و برای درخواست‌های بعدی آن را در Header ارسال می‌کند.



🔑
JwtAuth.php

PHP
8.x



<?php
// نکته: در پروژه واقعی از کتابخانه firebase/php-jwt استفاده کنید
class JwtAuth {
    private $secretKey = 'YOUR_SUPER_SECRET_KEY';

    public function generateToken($userId) {
        $payload = [
            'iss' => 'rajestary.com',
            'iat' => time(),
            'exp' => time() + 3600, // انقضا پس از ۱ ساعت
            'userId' => $userId
        ];
        
        // شبیه‌سازی امضای توکن (Base64Url Encode)
        return base64_encode(json_encode($payload));
    }

    public function verifyToken($token) {
        $decoded = json_decode(base64_decode($token), true);
        
        if ($decoded['exp'] < time()) {
            return false; // توکن منقضی شده
        }
        
        return $decoded;
    }
}

4️⃣ مدیریت Rate Limiting (محدودیت نرخ درخواست)

برای جلوگیری از حملات Brute Force یا فشار بیش از حد به سرور، تعداد درخواست‌های هر IP را محدود می‌کنیم.



🛡️
RateLimiter.php

PHP
8.x



<?php
function checkRateLimit($ip, $limit = 60, $period = 3600) {
    $key = "rate_limit:$ip";
    
    // در محیط واقعی از Redis استفاده کنید
    $currentCount = apcu_fetch($key) ?: 0;
    
    if ($currentCount >= $limit) {
        sendResponse(null, 'تعداد درخواست‌های شما بیش از حد مجاز است.', 429);
    }
    
    apcu_store($key, $currentCount + 1, $period);
}

❌ خطاهای رایج در API نویسی

🚫 اشتباه مرگبار:

نمایش خطاهای دقیق دیتابیس یا Stack Trace به کاربر نهایی. همیشه خطاها را لاگ کنید و به کاربر یک پیام عمومی و کد خطای استاندارد (مثل 500) برگردانید.

  • عدم اعتبارسنجی ورودی‌ها: هرگز به داده‌های ارسالی از سمت کلاینت اعتماد نکن.
  • استفاده از GET برای تغییر داده: عملیات حذف یا ویرایش باید حتماً با POST, PUT یا DELETE انجام شود.
  • نادیده گرفتن CORS: اگر API قرار است توسط دامنه دیگری صدا زده شود، هدرهای CORS را به درستی تنظیم کنید.

🏁 جمع‌بندی درس هشتم

مهمان عزیز، در این درس یاد گرفتی:

  • ✅ اصول طراحی RESTful و متدهای HTTP.
  • ✅ نحوه ساخت پاسخ‌های استاندارد JSON.
  • ✅ مکانیزم احراز هویت با JWT.
  • ✅ اهمیت Rate Limiting برای امنیت و پایداری.

🎓 تمرین عملی درس هشتم

یک endpoint ساده برای “دریافت لیست محصولات” بساز که فقط در صورت وجود توکن معتبر در Header، داده‌ها را برگرداند و در غیر این صورت خطای 401 بدهد.


🗺️ نقشه راه دوره: شما اینجا هستید!

برای اینکه بدانی دقیقاً کجای مسیر هستی و چه درس‌هایی در انتظار توست، به جدول زیر نگاه کن. درس فعلی با رنگ متفاوت مشخص شده است.

درس عنوان درس آنچه یاد می‌گیرید
۱ اصول SOLID در PHP تک‌مسئولیتی، باز/بسته، جایگزینی لیسکوف، جداسازی رابط، وارونگی وابستگی
۲ الگوهای طراحی (Design Patterns) Singleton, Factory, Strategy, Observer, MVC پیشرفته
۳ برنامه‌نویسی تابعی در PHP توابع ناشناس (Closures)، Arrow Functions، Map/Filter/Reduce
۴ مدیریت وابستگی با Composer نصب پکیج‌ها، مدیریت نسخه‌ها، Autoloading (PSR-4)
۵ تست‌نویسی حرفه‌ای (TDD) آشنایی با PHPUnit، نوشتن Unit Test، Mocking
۶ کار با Redis و Caching کش کردن داده‌ها، Session Handler با Redis
۷ پردازش‌های پس‌زمینه (Queue & Jobs) استفاده از صف‌ها برای ایمیل‌زنی یا پردازش سنگین
۸ API نویسی حرفه‌ای (RESTful) استانداردهای REST، احراز هویت با JWT، Rate Limiting
۹ امنیت سایبری پیشرفته تحلیل حملات پیچیده، Secure Headers، CSP
۱۰ پروژه نهایی پیشرفته ساخت یک CMS ماژولار با قابلیت نصب پلاگین و تم

🔗 لینک‌های مرتبط

نویسنده تیم رجستری
تاریخ انتشار

نظر خود را بنویسید

با ثبت نظر، به بهبود محتوای ما کمک کنید

امتیاز شما به این مطلب (اختیاری)
برای امتیازدهی، روی ستاره‌ها کلیک کنید
نام شما در سایت نمایش داده می‌شود
ایمیل شما محفوظ می‌ماند
0کاراکتر|حداقل ۱۰ کاراکتر
نظر سازنده و مفید بنویسید
ارسال دیدگاه: +۵ امتیاز
امتیازدهی: +۲ امتیاز
نشان شما: مبتدی
لطفاً از کلمات محترمانه استفاده کنید. دیدگاه‌های توهین‌آمیز حذف می‌شوند.
⚠️

هشدار مهم!

برای اتصال به درگاه پرداخت و انجام تراکنش، لطفاً VPN یا فیلترشکن خود را خاموش کنید.

⏳ ادامه در
5
ثانیه