آنچه در این مقاله میخوانید [پنهانسازی]
اگر قرار است API بسازی که هم قابل توسعه باشد، هم برای تیم های دیگر قابل فهم بماند، باید از همان اول اصول REST را درست پیاده کنی. api restful در لاراول فقط ساخت چند route و برگرداندن JSON نیست. بحث اصلی این است که مسیرها، اعتبارسنجی، خطاها، احراز هویت و نسخه بندی را طوری بچینی که بعدا تبدیل به کابوس نگهداری نشود.
سرفصل های مقاله
- API RESTful یعنی چه در عمل
- ساختار پیشنهادی پروژه برای API
- تعریف Resource و مسیرهای استاندارد
- کنترلرهای سبک و قابل تست
- اعتبارسنجی ورودی با Form Request
- پاسخ JSON استاندارد و قابل پیش بینی
- مدیریت خطاها به شکل اصولی
- استفاده از API Resource برای خروجی
- صفحه بندی، فیلتر و مرتب سازی
- احراز هویت و سطح دسترسی
- نسخه بندی API
- امنیت در طراحی API
- تست API و اطمینان از پایداری
- اشتباهات رایج در api restful در لاراول
- جمع بندی
API RESTful یعنی چه در عمل
REST یعنی منابع را با URL های معنی دار معرفی کنی و با متدهای استاندارد HTTP با آنها کار کنی. مثلا برای منبع products، مسیر /products برای لیست و ساخت، و /products/{id} برای مشاهده، ویرایش و حذف است. تفاوت یک API اصولی با API شلخته همین جاست؛ قراردادها واضح و قابل پیش بینی هستند.
ساختار پیشنهادی پروژه برای API
اگر API قرار است بزرگ شود، بهتر است ساختار را از ابتدا تمیز نگه داری. کنترلرها را جدا و کوتاه نگه دار. منطق اصلی را داخل Service یا Action class ببرد. دسترسی به دیتابیس را یا با Eloquent منظم کن یا اگر پیچیده شد Repository بساز. هدف این است که کنترلر فقط ورودی را بگیرد، اعتبارسنجی کند و خروجی برگرداند.
تعریف Resource و مسیرهای استاندارد
لاراول برای REST یک ابزار خیلی خوب دارد، Route::apiResource. این روش مسیرهای استاندارد را یکجا می سازد و نظم پروژه را بالا می برد. مثلا برای Users، مسیرهای index, store, show, update, destroy را به صورت استاندارد در اختیارت می گذارد. این دقیقا همان چیزی است که از api restful در لاراول انتظار می رود.
کنترلرهای سبک و قابل تست
کنترلر نباید محل انجام همه کارها باشد. اگر داخل کنترلر هم query سنگین بزنی، هم منطق بیزینس بنویسی، هم خروجی را فرمت کنی، خیلی زود قابل نگهداری نیست. کنترلر باید سبک باشد. ورودی را بگیرد، سرویس را صدا بزند، و پاسخ استاندارد بدهد.
اعتبارسنجی ورودی با Form Request
یکی از اصول پیاده سازی درست API در لاراول این است که اعتبارسنجی را از کنترلر جدا کنی. Form Request دقیقا همین کار را می کند. تو قوانین را در یک کلاس جدا می نویسی و لاراول قبل از ورود به کنترلر ورودی را بررسی می کند. نتیجه این می شود که کنترلر تمیزتر و خطاها یکدست تر می شوند.
پاسخ JSON استاندارد و قابل پیش بینی
یکی از نقاط ضعف خیلی از API ها این است که هر endpoint یک مدل پاسخ متفاوت دارد. در api restful در لاراول بهتر است یک قالب ثابت برای پاسخ ها داشته باشی. مثلا همیشه یک ساختار مشخص برای موفقیت و یک ساختار مشخص برای خطا. این کار برای فرانت و مصرف کننده API به شدت ارزشمند است.
مدیریت خطاها به شکل اصولی
API خوب باید خطا را واضح و استاندارد برگرداند. خطاهای اعتبارسنجی باید با status code مناسب برگردند. خطاهای دسترسی 403 باشند و نه 500. خطاهای نبودن منبع 404. این یعنی مصرف کننده API لازم نیست حدس بزند چه اتفاقی افتاده. در لاراول می توانی با Exception Handler و پاسخ های سفارشی این کار را تمیز انجام دهی.
استفاده از API Resource برای خروجی
API Resource ها در لاراول برای فرمت کردن خروجی عالی هستند. به جای اینکه هرجا یک array دستی بسازی، یک Resource می نویسی و خروجی را از همان مدیریت می کنی. این روش باعث می شود خروجی همیشه یکدست باشد و اگر ساختار تغییر کرد، فقط یکجا اصلاح شود.
صفحه بندی، فیلتر و مرتب سازی
API بدون صفحه بندی در پروژه واقعی مشکل ساز می شود. باید از pagination استفاده کنی و پاسخ را استاندارد برگردانی. همچنین فیلتر و sort باید واضح و قابل کنترل باشد. بهتر است پارامترها مشخص باشند و برای هرکدام اعتبارسنجی انجام شود تا API از ورودی های عجیب و سنگین آسیب نبیند.
احراز هویت و سطح دسترسی
بیشتر API ها نیاز به احراز هویت دارند. در لاراول معمولا Sanctum گزینه سبک و مناسب است. اما صرفا لاگین کافی نیست. باید authorization داشته باشی. یعنی کاربر چه اجازه هایی دارد. Policy ها و Gate ها برای همین ساخته شده اند. api restful در لاراول بدون کنترل دسترسی درست، در عمل ناقص است.
نسخه بندی API
نسخه بندی یعنی بتوانی API را تغییر بدهی بدون اینکه کلاینت های قدیمی بشکنند. رایج ترین روش این است که نسخه را در URL قرار بدهی مثل /api/v1. این کار در ابتدا شاید اضافی به نظر برسد، اما وقتی سیستم رشد کرد، نجاتت می دهد.
امنیت در طراحی API
باید جلوی حملات رایج را از همان ابتدا بگیری. Rate limiting برای جلوگیری از فشار زیاد، محدود کردن فیلدهای قابل آپدیت برای جلوگیری از mass assignment، و لاگ نکردن اطلاعات حساس. اینها چیزهایی هستند که یک API اصولی را از یک API ساده جدا می کند.
تست API و اطمینان از پایداری
تست کردن endpoint ها در لاراول راحت است. اگر API برای پروژه واقعی است، تست های feature بنویس تا مطمئن شوی مسیرها، اعتبارسنجی و سطح دسترسی درست کار می کند. تست باعث می شود وقتی بعدا چیزی را تغییر دادی، با خیال راحت جلو بروی.
اشتباهات رایج در api restful در لاراول
یکی از اشتباهات رایج این است که مسیرها را غیر استاندارد طراحی کنند. مثلا /getUsers یا /deleteUser. اشتباه دیگر برگرداندن پیام های نامنظم و status code اشتباه است. اشتباه سوم این است که همه چیز را داخل کنترلر بنویسند و پروژه بعد از چند ماه تبدیل به آشفتگی شود.
جمع بندی
api restful در لاراول وقتی اصولی پیاده سازی شود، یک API تمیز، قابل توسعه و قابل اعتماد می سازد. مسیرهای استاندارد، اعتبارسنجی جدا، پاسخ های یکدست، مدیریت خطا، احراز هویت و نسخه بندی پایه های اصلی هستند. اگر از همان ابتدا این اصول را رعایت کنی، API تو با رشد پروژه نه تنها خراب نمی شود، بلکه راحت تر هم توسعه پیدا می کند.



