الیه! بحث Versioning در API یکی از مفاهیم مهم توی طراحی API حرفهای هست، مخصوصاً وقتی داری یه API عمومی یا بزرگ برای مدت طولانی توسعه میدی. چون با گذشت زمان، احتمال اینکه نیاز به تغییر در ساختار یا رفتار API داشته باشی خیلی زیاده — و نمیخوای این تغییرات برنامهی کلاینتهایی که قبلاً به API وصل شدن رو بشکنه.
در ادامه یه راهنمای کامل از versioning توی API (مخصوصاً در لاراول) برات آوردم:
🔢 Versioning در API — راهنمای جامع برای Laravel
📌 چرا API Versioning مهمه؟
وقتی تغییراتی توی API بدی (مثل تغییر ساختار خروجی، حذف فیلدها، تغییر نام مسیرها)، بهتره نسخهی جدیدی از API ایجاد کنی که با نسخههای قبلی تداخلی نداشته باشه.
📁 روشهای متداول Versioning در API
1. 🛣️ نسخه در مسیر (URL Path)
سادهترین و رایجترین روش:
مزایا:
-
قابل فهم برای همه
-
سازگار با مرورگر
-
لاگگیری و دیباگ راحتتر
2. 🧾 نسخه در هدر (Accept Header)
مزایا:
-
URL تمیز میمونه
-
مناسب برای APIهای پیشرفته و RESTful
معایب:
-
برای تست در مرورگر یا ابزار ساده سختتره
3. ❓ نسخه به صورت Query String (کمتر استفاده میشه)
کمتر توصیه میشه، چون semantically درست نیست و امنیت/قابلیت کش پایینتری داره.
🧰 پیادهسازی Versioning در Laravel
🎯 روش URL Versioning (مناسب و ساده)
ساخت فایل Route مخصوص نسخه:
تنظیم در RouteServiceProvider:
ساخت کنترلر جداگانه برای هر نسخه:
🧠 توصیههای مهم
-
برای هر نسخه، مسیرها و کنترلرهای جداگانه تعریف کن.
-
نسخههای قدیمیتر رو تا زمانی که کاربران ازشون استفاده میکنن پشتیبانی کن.
-
بهتره نسخهها فقط در صورت تغییر breaking تغییر کنن (یعنی تغییراتی که با نسخه قبلی سازگار نیستن).
-
از مستندسازی نسخهها غافل نشو — برای هر نسخه بهتره مستندات جداگانه تهیه کنی.
🔥 ابزارهای مرتبط
-
Laravel API Resources: برای مدیریت خروجی JSON با فرمت خاص
-
Laravel Passport / Sanctum: احراز هویت در APIهای نسخهدار
-
Swagger / Laravel Scribe: مستندسازی اتوماتیک نسخههای مختلف API
اینجا یه پروژه ساده API با نسخهبندی v1 و v2 بر پایه Laravel میسازیم، با قابلیت احراز هویت (API Token) و خروجی JSON ساختارمند.
✅ ویژگیهای پروژه
-
✅ API نسخهبندی شده (
/api/v1و/api/v2) -
✅ احراز هویت با Laravel Sanctum
-
✅ دو کنترلر برای مدیریت کاربران در هر نسخه
-
✅ خروجی JSON با Resource
-
✅ Routing مرتبشده با namespace
🏗️ قدم اول: ساخت پروژه
اضافه کردن middleware به app/Http/Kernel.php:
📁 ساختار دایرکتوریها
📜 تعریف Routeها
در routes/api.php:
در routes/api_v1.php:
در routes/api_v2.php:
🎮 کنترلر نسخه اول - app/Http/Controllers/Api/V1/UserController.php
🚀 کنترلر نسخه دوم - app/Http/Controllers/Api/V2/UserController.php
🔑 ثبتنام و دریافت توکن
مسیر ثبتنام (در routes/api.php):
📬 تست با Postman
-
POST /api/register→ دریافت توکن -
در درخواستهای
GET /api/v1/userیاGET /api/v2/user، هدر زیر رو اضافه کن: