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 ماژولار با قابلیت نصب پلاگین و تم

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

👤
نویسنده یونس رجستری
📅
تاریخ انتشار 28 مرداد 1405
🔄
آخرین بروزرسانی 28 مرداد 1405
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

⚠️

هشدار مهم!

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

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