# مشخصات درس‌نامه: رمزگشایی از مستندات API و مدیریت امن کلیدها (Credentials & .env) - **شناسه در سیلابس:** `L10.3` - **فصل:** فصل ۱۰: اتصال سرویس‌های بیرونی (Ch 10) - **نوع محتوا:** 📘 درس‌نامه متنی - **زمان تقریبی مطالعه:** ۱۵ دقیقه - **پیش‌نیازهای مستقیم:** `L10.2` (سرویس Third-Party چیست) --- ## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: - [ ] **درک کند (Understand):** ساختار استاندارد مستندات فنی API (شامل Base URL، هدرهای احراز هویت، اندپوینت‌ها، متدهای HTTP و نمونه‌های cURL/JSON) را به راحتی بخواند و درک کند. - [ ] **تحلیل/ارزیابی کند (Evaluate):** تفاوت متغیرهای محیطی امن سمت سرور با متغیرهای عمومی کلاینتی با پیشوند `NEXT_PUBLIC_` را تشخیص داده و خطرات نشت اطلاعات حساس را ارزیابی کند. - [ ] **به‌کار ببندد (Apply):** فایل‌های `.env.local` و `.env.example` را به شکل استاندارد در پروژه پورتفولیو ایجاد و مقادیر آزمایشی کلیدها را در آن ذخیره نماید. - [ ] **ایجاد کند (Create):** یک پرامپت طلایی برای ایجنت بنویسد که با دریافت نمونه کد cURL یا مستندات وب‌سرویس، یک ماژول ارتباطی تمیز با تایپ‌های کامل TypeScript تولید کند. --- ## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) ### آنچه باید پوشش داده شود (In-Scope): 1. **شکستن ترس از مستندات انگلیسی و جداول پارامترها:** * مستندات API شبیه دفترچه راهنمای یک تلویزیون جدید است؛ لازم نیست همه صفحات را بخوانید، فقط باید بدانید دکمه روشن و پورت ورودی کجاست! 2. **کالبدشکافی ۵ بخش اصلی هر سند API:** * ۱. آدرس پایه (Base URL): سرور مرکزی کجاست؟ (مثلاً `https://api.kavenegar.com/v1/`). * ۲. شیوه ارسال احراز هویت (Authentication): کلید در هدر `Authorization: Bearer ` است یا داخل پارامترهای آدرس؟ * ۳. مسیرها و متدها (Endpoints & Methods): آیا داده می‌فرستیم (`POST`) یا داده می‌خوانیم (`GET`)؟ * ۴. بدنه درخواست (Request Body / Payload): چه فیلدهایی اجباری (Required) و چه فیلدهایی اختیاری (Optional) هستند؟ * ۵. پاسخ سرور و کدهای وضعیت (Response & Status Codes): پاسخ موفق ۲۰۰۰، خطای ۴۰۱ احراز هویت، خطای ۴۲۹ محدودیت درخواست و خطای ۵۰۰ سرور. 3. **تکنیک میانبر وایب کدینگ: خوراندن مستندات به ایجنت هوش مصنوعی:** * نحوه کپی کردن دستور cURL از مستندات و تبدیل آن به کدهای تایپ‌اسکریپت تمیز توسط ایجنت با دستور `@docs`. 4. **قوانین طلایی مدیریت کلیدها و گاوصندوق `.env.local`:** * قانون شماره ۱: هرگز کلید را هاردکد نکنید (`const apiKey = "123"` ممنوع!). * قانون شماره ۲: فایل `.env.local` باید در `.gitignore` ثبت شده باشد تا هیچ‌وقت روی گیت‌هاب آپلود نشود. * قانون شماره ۳: ساخت فایل نمونه `.env.example` بدون مقادیر واقعی برای سایر اعضای تیم یا ریپازیتوری عمومی. * قانون شماره ۴: تفاوت حیاتی متغیرهای معمولی (مخفی در سرور) با متغیرهای دارای پیشوند `NEXT_PUBLIC_` (آشکار در مرورگر کاربر). 5. **دستورات چندسکویی برای کپی و مدیریت فایل‌های محیطی:** * ساخت `.env.local` از روی `.env.example` با دستورات ترمینال برای ویندوز، مک و لینوکس. 6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** * کال‌اوت بنفش (`
`): نحوه کار ربات‌های اسکنر گیت‌هاب که کلیدهای لو رفته را در عرض چند ثانیه سرقت می‌کنند. * کال‌اوت سبز (`
`): ابزارهای تستی سریع مانند Thunder Client یا استفاده از دستور ساده `curl` برای راستی‌آزمایی کارکرد کلید در ۳۰ ثانیه. * کال‌اوت قرمز (`
`): هرگز کلیدهای واقعی و اعتباری خود را داخل چت‌بات‌های عمومی یا تیکت‌های پشتیبانی نگذارید. ### آنچه نباید وارد آن شویم (Out-of-Scope): - مباحث پیشرفته هشینگ و امضای دیجیتال توکن‌های JWT (فصل ۱۱). - اتصال اختصاصی وب‌سرویس‌های خاص (در درس‌های بعدی فصل ۱۰ به تفکیک بررسی می‌شوند). --- ## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) | اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | | :--- | :--- | :--- | | API Documentation | مستندات رابط برنامه‌نویسی | راهنمای رسمی ارائه‌دهنده سرویس که نحوه ارسال درخواست و قالب پاسخ را شرح می‌دهد | | Base URL | آدرس پایه سرور | ریشه اصلی آدرس وب‌سرویس که تمام مسیرها و درخواست‌ها به انتهای آن متصل می‌شوند | | Bearer Token | توکن حامل | فرمت استاندارد ارسال کلید امنیتی در هدر درخواست HTTP برای اثبات هویت مجاز | | Environment Variable | متغیر محیطی | مقادیر تنظیمی خارج از کد برنامه که در فایل‌های محلی تنظیم و متناسب با محیط تغییر می‌کنند | | GitLeaks / Secret Leak | نشت اطلاعات محرمانه | حادثه امنیتی خطرناک انتشار ناخواسته رمزها و کلیدهای خصوصی در تاریخچه گیت | | cURL | ابزار خط فرمان cURL | دستور ترمینالی استاندارد برای شبیه‌سازی و ارسال درخواست‌های شبکه به سرورها | --- ## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) > **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: 1. **تصویر کاور درس:** `images/cover.png` * **موضوع:** گاوصندوق دیجیتال مستحکم نئونی که کلیدهای API را محافظت می‌کند در کنار یک دفترچه راهنمای مدرن که مسیرهای نوری از آن خارج می‌شوند. 2. **کالبدشکافی ساختار سند API مدرن:** `images/api-docs-anatomy.png` * **موضوع:** اسکرین‌شات از صفحه مستندات یک وب‌سرویس مدرن با فلش‌های توضیحی روی Base URL، Header، Request Body و Response JSON. 3. **تفکیک دو دنیای متغیرهای محیطی در Next.js:** `images/env-variables-boundary.png` * **موضوع:** اینفوگرافیک مقایسه‌ای: سمت سرور (دیوار محرمانه، متغیرهای بدون پیشوند) در برابر سمت کلاینت (پیشوند NEXT_PUBLIC_، دید همگانی در سورس صفحه مرورگر). 4. **تبدیل نمونه cURL به کد تایپ‌اسکریپت با ایجنت:** `images/curl-to-typescript-prompt.png` * **موضوع:** پنجره چت ادیتور که دستور cURL مستندات به ایجنت داده شده و ایجنت یک فانکشن تمیز تایپ‌شده تحویل داده است. --- ## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) 1. **تیتر اصلی:** `# رمزگشایی از مستندات API و مدیریت امن کلیدها (Credentials & .env)` 2. **مقدمه:** چگونه مستندات وب‌سرویس‌ها را در ۵ دقیقه رمزگشایی کنیم و کلیدهای محرمانه را مثل طلا در گاوصندوق نگه داریم؟ 3. **جدول کاور درس** 4. **استعاره منوی رستوران و گارسون:** * مستندات API دقیقاً مثل منوی رستوران است: غذاها چیست (Endpoints)، هزینه چیست (Payload)، و غذا چطور سرو می‌شود (Response). 5. **کالبدشکافی ۵ رکن اساسی هر سند API با مثال واقعی:** * آدرس پایه، هدرهای Authorization، متدهای GET/POST، بدنه جیسون و کدهای پاسخ موفق و خطا. 6. **سریع‌ترین تست با دستور cURL در ترمینال:** * تست یک‌خطی ساده برای راستی‌آزمایی پاسخ سرور قبل از شروع کدنویسی. 7. **روش تبدیل مستندات به ماژول آماده تایپ‌اسکریپت با ایجنت هوش مصنوعی:** * جعبه پرامپت طلایی: > «من این نمونه درخواست cURL را از مستندات وب‌سرویس دارم: [نمونه cURL]. لطفاً یک تابع Server Action تایپ‌اسکریپت تمیز در Next.js با تایپ‌های مشخص برای ورودی‌ها و خروجی‌ها بساز که کلید API را از `process.env` بخواند و خطاهای شبکه را با پیام خطای خوانا به زبان فارسی مدیریت کند.» 8. **مدیریت گاوصندوق `.env.local` و جلوگیری از فاجعه نشت کلید:** * چرا کلیدها هرگز داخل کدهای گیت وارد نمی‌شوند؟ * تفاوت حساسیت‌برانگیز بین متغیرهای معمولی سروری و متغیرهای `NEXT_PUBLIC_`. 9. **دستورات چندسکویی ساخت فایل تنظیمات محیطی:** * منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس: - Windows (PowerShell): ```powershell Copy-Item .env.example .env.local ``` - macOS (Terminal): ```bash cp .env.example .env.local ``` - Linux (Bash): ```bash cp .env.example .env.local ``` 10. **باکس نکته Quera (`
`):** ماجرای وحشتناک ربات‌های اسکنر گیت‌هاب؛ نشت یک کلید API در یک مخزن عمومی و مصرف میلیون‌ها تومان اعتبار در کمتر از چند دقیقه! 11. **باکس راهنمای Quera (`
`):** افزونه‌های ساده مثل Thunder Client در ادیتور برای تست اندپوینت‌ها با یک کلیک. 12. **باکس هشدار Quera (`
`):** چک‌لیست نهایی فایل `.gitignore`؛ مطمئن شوید عبارت `.env*.local` در خطوط گیت‌ایگنور وجود دارد. 13. **جمع‌بندی درس‌نامه:** تسلط کامل بر زبان مستندات API و گاوصندوق متغیرهای محیطی؛ ورود به اولین اتصال واقعی: ارسال پیامک با وب‌سرویس‌های کاوه‌نگار و SMS.ir در درس بعدی. --- ## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) - [ ] پنج بخش اصلی مستندات API با مثال‌های بصری و ملموس تشریح شوند. - [ ] مرز امنیتی متغیرهای سروری و متغیرهای دارای پیشوند `NEXT_PUBLIC_` تبیین گردد. - [ ] پرامپت طلایی تبدیل مستندات و نمونه cURL به کدهای تمیز TypeScript ارائه شود. - [ ] دستورات ترمینالی کپی فایل محیطی برای سیستم‌عامل‌های مختلف در تب‌های کشویی گنجانده شود.