امروزه بسیاری از اپلیکیشنهای موبایل برای مدیریت کاربران، دریافت اطلاعات، ثبت سفارش، پردازش پرداخت و ارتباط با سرور به یک API نیاز دارند. اگر بکاند برنامه را با Laravel توسعه میدهید، میتوانید با استفاده از قابلیتهای این فریمورک یک API استاندارد طراحی کنید تا اپلیکیشنهای اندروید، iOS یا Flutter از طریق درخواستهای HTTP با سرور ارتباط برقرار کنند.
در این آموزش، یک API کاربردی با Laravel میسازیم که امکان ثبتنام کاربران، ورود با ایمیل و رمز عبور، دریافت اطلاعات کاربر واردشده و خروج از حساب را فراهم میکند. برای مدیریت توکنهای احراز هویت از Laravel Sanctum استفاده خواهیم کرد.
در پایان مقاله، میتوانید API را با ابزاری مانند Postman یا Talend API Tester آزمایش کنید و از همین ساختار برای توسعه قابلیتهای دیگر اپلیکیشن خود استفاده کنید.
API چیست و چرا برای اپلیکیشن موبایل به آن نیاز داریم؟
API مخفف Application Programming Interface است و راهی استاندارد برای ارتباط میان نرمافزارها فراهم میکند.
برای مثال، فرض کنید یک اپلیکیشن فروشگاهی با Flutter طراحی کردهاید و بکاند آن با Laravel توسعه داده شده است. اپلیکیشن برای نمایش محصولات باید اطلاعات را از سرور دریافت کند. برای ثبت سفارش نیز باید اطلاعات سبد خرید را به سرور ارسال کند.
در چنین معماریای، Laravel مسئول پردازش درخواستها، ارتباط با دیتابیس، بررسی مجوزها و برگرداندن پاسخ است؛ اپلیکیشن موبایل نیز اطلاعات دریافتی را به کاربر نمایش میدهد.
ساختار کلی ارتباط به این شکل است:
اپلیکیشن موبایل
|
| HTTP Request
v
Laravel REST API
|
| اعتبارسنجی و پردازش
v
Database
|
| نتیجه درخواست
v
Laravel REST API
|
| JSON Response
v
اپلیکیشن موبایل
این معماری مزیت مهمی دارد: میتوانید از یک بکاند مشترک برای چند کلاینت مختلف استفاده کنید؛ مثلاً اپلیکیشن اندروید، اپلیکیشن iOS و یک وبسایت.
در این پروژه چه APIهایی میسازیم؟
برای اینکه آموزش عملی باشد، APIهای زیر را پیادهسازی میکنیم:
| متد HTTP | مسیر | کاربرد | نیاز به ورود |
|---|---|---|---|
| POST | /api/register | ثبتنام کاربر | خیر |
| POST | /api/login | ورود کاربر و دریافت توکن | خیر |
| GET | /api/user | دریافت اطلاعات کاربر جاری | بله |
| POST | /api/logout | خروج و لغو توکن فعلی | بله |
در این پروژه از توکنهای Bearer استفاده میکنیم. پس از ورود موفق، سرور یک توکن به اپلیکیشن میدهد و اپلیکیشن آن را در درخواستهای محافظتشده ارسال میکند.
مرحله اول: آمادهسازی پروژه Laravel
ابتدا باید یک پروژه Laravel داشته باشید. اگر هنوز پروژهای ایجاد نکردهاید، میتوانید با دستور زیر یک پروژه جدید بسازید:
composer create-project laravel/laravel mobile-api
سپس وارد پوشه پروژه شوید:
cd mobile-api
اتصال دیتابیس را در فایل .env تنظیم کنید. برای مثال، تنظیمات MySQL میتواند به شکل زیر باشد:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mobile_api
DB_USERNAME=root
DB_PASSWORD=
نام دیتابیس، نام کاربری و رمز عبور را مطابق محیط خودتان تغییر دهید.
اگر از SQLite یا دیتابیس دیگری استفاده میکنید، تنظیمات اتصال را متناسب با همان دیتابیس وارد کنید.
مرحله دوم: نصب Laravel Sanctum و فعالسازی API Routing
Laravel Sanctum ابزار رسمی Laravel برای مدیریت توکنهای احراز هویت و برخی سناریوهای احراز هویت SPA است. برای اپلیکیشن موبایل، قابلیت توکنهای شخصی Sanctum گزینه مناسبی محسوب میشود.
در نسخههای جدید Laravel، از جمله Laravel 12 و 13، میتوانید از دستور زیر برای نصب قابلیتهای API و Sanctum استفاده کنید:
php artisan install:api
این دستور در پروژههای پشتیبانیشده، Sanctum را نصب و تنظیمات لازم را انجام میدهد و فایل routes/api.php را ایجاد میکند. <Cite refs={["turn765931search0","turn765931search2"]}/>
اگر از نسخه قدیمیتر Laravel استفاده میکنید یا دستور بالا در نسخه شما وجود ندارد، باید روش نصب متناسب با همان نسخه را از مستندات رسمی بررسی کنید.
پس از نصب، Migrationهای پروژه را اجرا کنید:
php artisan migrate
Sanctum جدولی برای ذخیره توکنهای دسترسی ایجاد میکند که معمولاً نام آن personal_access_tokens است.
نکته: اگر Migrationهای پروژه قبلاً اجرا شدهاند، لازم نیست آنها را دوباره اجرا کنید. فقط مطمئن شوید Migration مربوط به Sanctum نیز اجرا شده باشد.
مرحله سوم: آمادهسازی مدل User برای صدور توکن
برای اینکه بتوانیم از قابلیت توکنهای Sanctum استفاده کنیم، باید Trait مربوط به آن را به مدل کاربران اضافه کنیم.
فایل زیر را باز کنید:
app/Models/User.php
در بالای فایل، این کلاس را وارد کنید:
use Laravel\Sanctum\HasApiTokens;
سپس Trait را به مدل اضافه کنید:
use HasApiTokens;
برای مثال، ساختار مدل میتواند به شکل زیر باشد:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
protected $fillable = [
'name',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
}
اگر مدل شما از قبل Traitها یا تنظیمات دیگری دارد، آنها را حذف نکنید. فقط HasApiTokens را اضافه کنید و تنظیمات موجود را حفظ کنید.
این Trait امکان صدور و مدیریت توکنهای مربوط به هر کاربر را فراهم میکند.
همچنین فیلد password باید در دیتابیس بهاندازه کافی ظرفیت داشته باشد. در Migration پیشفرض Laravel، این ستون بهصورت مناسب تعریف شده است.
مرحله چهارم: ساخت کنترلر API
برای اینکه منطق ثبتنام، ورود، دریافت اطلاعات و خروج از Routeها جدا باشد، یک کنترلر اختصاصی ایجاد میکنیم.
در ترمینال اجرا کنید:
php artisan make:controller Api/AuthController
فایل کنترلر در مسیر زیر ایجاد میشود:
app/Http/Controllers/Api/AuthController.php
کد زیر را در آن قرار دهید:
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
{
/**
* ثبتنام کاربر جدید
*/
public function register(Request $request)
{
$validated = $request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => [
'required',
'email',
'max:255',
'unique:users,email',
],
'password' => [
'required',
'string',
'min:8',
'confirmed',
],
'device_name' => [
'required',
'string',
'max:100',
],
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
]);
$token = $user->createToken(
$validated['device_name']
);
return response()->json([
'message' => 'ثبتنام با موفقیت انجام شد.',
'data' => [
'user' => [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
],
'token' => $token->plainTextToken,
'token_type' => 'Bearer',
],
], 201);
}
/**
* ورود کاربر
*/
public function login(Request $request)
{
$validated = $request->validate([
'email' => ['required', 'email'],
'password' => ['required', 'string'],
'device_name' => [
'required',
'string',
'max:100',
],
]);
$user = User::where(
'email',
$validated['email']
)->first();
if (
! $user ||
! Hash::check(
$validated['password'],
$user->password
)
) {
throw ValidationException::withMessages([
'email' => [
'اطلاعات ورود واردشده صحیح نیست.',
],
]);
}
$token = $user->createToken(
$validated['device_name']
);
return response()->json([
'message' => 'ورود با موفقیت انجام شد.',
'data' => [
'user' => [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
],
'token' => $token->plainTextToken,
'token_type' => 'Bearer',
],
]);
}
/**
* دریافت اطلاعات کاربر جاری
*/
public function user(Request $request)
{
$user = $request->user();
return response()->json([
'data' => [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
],
]);
}
/**
* خروج از حساب و لغو توکن فعلی
*/
public function logout(Request $request)
{
$request->user()
->currentAccessToken()
->delete();
return response()->json([
'message' => 'خروج با موفقیت انجام شد.',
]);
}
}
در ادامه، منطق این کنترلر را بررسی میکنیم.
متد register؛ ثبتنام کاربر
در این متد، اطلاعات ورودی اعتبارسنجی میشوند:
- نام باید وارد شود.
- ایمیل باید معتبر و یکتا باشد.
- رمز عبور باید حداقل هشت کاراکتر داشته باشد.
- مقدار تأیید رمز عبور باید با رمز اصلی مطابقت داشته باشد.
- نام دستگاه نیز باید مشخص شود.
قانون confirmed انتظار دارد فیلدی با نام password_confirmation در درخواست وجود داشته باشد.
پس از اعتبارسنجی، کاربر در دیتابیس ذخیره میشود. رمز عبور با Hash::make() هش میشود و هرگز به شکل متن ساده در دیتابیس قرار نمیگیرد.
سپس با createToken() توکن جدیدی ساخته میشود. مقدار plainTextToken فقط در زمان ایجاد توکن قابل دریافت است و باید همان زمان به کلاینت تحویل داده شود. Sanctum مقدار توکن را بهصورت هششده در دیتابیس نگهداری میکند. <Cite refs={["turn765931search0","turn609554view0"]}/>
متد login؛ ورود کاربر
در این متد، ابتدا کاربر بر اساس ایمیل جستوجو میشود. سپس با Hash::check() رمز عبور واردشده با هش ذخیرهشده مقایسه میشود.
اگر اطلاعات صحیح باشند، یک توکن جدید برای دستگاه ایجاد میشود.
پارامتر device_name میتواند عبارتی مانند android-phone یا iphone-app باشد. این نام به مدیریت توکنهای کاربر کمک میکند و بهتنهایی هویت واقعی دستگاه را اثبات نمیکند.
متد user؛ دریافت اطلاعات کاربر
در درخواستهای محافظتشده، متد زیر کاربر احراز هویتشده را برمیگرداند:
$request->user()
بنابراین نیازی نیست شناسه کاربر را از اپلیکیشن دریافت کنیم و با آن اطلاعات کاربر را پیدا کنیم. شناسه و هویت کاربر باید از توکن معتبر درخواست استخراج شوند.
در پاسخ نیز فقط اطلاعات عمومی کاربر را برمیگردانیم؛ نه رمز عبور یا سایر اطلاعات حساس را.
متد logout؛ خروج از حساب
در این پروژه، خروج به معنی لغو توکن فعلی است:
$request->user()
->currentAccessToken()
->delete();
پس از اجرای موفق این عملیات، توکن فعلی دیگر نباید برای احراز هویت درخواستهای بعدی معتبر باشد.
اگر کاربر روی چند دستگاه وارد شده باشد، این روش فقط توکن درخواست جاری را لغو میکند؛ سایر توکنها همچنان فعال خواهند بود، مگر اینکه جداگانه لغو شوند.
مرحله پنجم: تعریف Routeهای API
اکنون باید مسیرهای API را در فایل زیر تعریف کنیم:
routes/api.php
کد زیر را در فایل قرار دهید:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\AuthController;
Route::post('/register', [
AuthController::class,
'register',
])->middleware('throttle:5,1');
Route::post('/login', [
AuthController::class,
'login',
])->middleware('throttle:5,1');
Route::middleware('auth:sanctum')->group(function () {
Route::get('/user', [
AuthController::class,
'user',
]);
Route::post('/logout', [
AuthController::class,
'logout',
]);
});
اگر فایل از قبل Routeهای دیگری دارد، آنها را حذف نکنید و مسیرهای جدید را به فایل موجود اضافه کنید.
چرا از auth:sanctum استفاده میکنیم؟
این Middleware بررسی میکند که درخواست دارای احراز هویت معتبر باشد.
اگر درخواست از یک اپلیکیشن موبایل ارسال شده باشد، Sanctum میتواند توکن Bearer موجود در هدر Authorization را بررسی کند.
اگر توکن معتبر نباشد یا ارسال نشده باشد، کاربر به مسیر محافظتشده دسترسی نخواهد داشت.
در درخواستهای API که هدر Accept: application/json دارند، Laravel معمولاً خطاهای اعتبارسنجی و احراز هویت را بهصورت پاسخ JSON برمیگرداند. <Cite refs={["turn765931search0","turn765931search2"]}/>
Rate Limiting چیست؟
در این پروژه، روی مسیرهای ورود و ثبتنام از Middleware زیر استفاده کردهایم:
->middleware('throttle:5,1');
این تنظیم، در حالت معمول، تعداد درخواستهای مجاز را به پنج درخواست در هر دقیقه برای کلید محدودسازی پیشفرض محدود میکند.
این مقدار صرفاً برای نمونه آموزشی است و باید بر اساس نیاز واقعی پروژه تنظیم شود. در پروژه عملیاتی بهتر است سیاست محدودسازی درخواست، رفتار کاربران، IP، حساب کاربری و نحوه مدیریت درخواستهای ناموفق بهدقت طراحی شود.
مرحله ششم: بررسی Routeها
پس از تعریف مسیرها، دستور زیر را اجرا کنید:
php artisan route:list --path=api
باید مسیرهای مربوط به ثبتنام، ورود، دریافت اطلاعات کاربر و خروج را مشاهده کنید.
در پروژههای جدید Laravel، فایل routes/api.php بهطور خودکار پیشوند /api میگیرد. بنابراین اگر در این فایل مسیر /login را تعریف کرده باشید، آدرس کامل آن بهصورت /api/login خواهد بود.
این پیشوند را دوباره داخل خود Route وارد نکنید؛ مگر اینکه عمداً ساختار متفاوتی تنظیم کرده باشید.
مرحله هفتم: تست ثبتنام با Postman یا Talend API Tester
اکنون میتوانیم API را آزمایش کنیم.
فرض میکنیم برنامه روی آدرس زیر اجرا میشود:
http://127.0.0.1:8000
در محیط توسعه میتوانید سرور را با دستور زیر اجرا کنید:
php artisan serve
در محیط عملیاتی، از دامنه و HTTPS واقعی خود استفاده کنید.
درخواست اول: ثبتنام
تنظیمات درخواست:
- Method:
POST - URL:
http://127.0.0.1:8000/api/register - Content-Type:
application/json - Accept:
application/json
در بخش Body، نوع JSON را انتخاب کنید و اطلاعات زیر را ارسال کنید:
{
"name": "Ali Ahmadi",
"email": "ali@example.com",
"password": "StrongPass123!",
"password_confirmation": "StrongPass123!",
"device_name": "android-phone"
}
ایمیل نمونه را با ایمیلی که هنوز در دیتابیس ثبت نشده است جایگزین کنید.
در صورت موفقیت، پاسخ با وضعیت HTTP 201 Created برگردانده میشود و شامل اطلاعات عمومی کاربر و توکن دسترسی خواهد بود.
نکته امنیتی: توکن برگشتی یک مقدار محرمانه است. آن را در اسکرینشات عمومی، گزارش قابل دسترس یا کد منتشرشده قرار ندهید.
درخواست دوم: ورود
تنظیمات:
- Method:
POST - URL:
http://127.0.0.1:8000/api/login - Content-Type:
application/json - Accept:
application/json
در Body این اطلاعات را ارسال کنید:
{
"email": "ali@example.com",
"password": "StrongPass123!",
"device_name": "android-phone"
}
در صورت صحیح بودن اطلاعات، پاسخ شامل توکن جدید خواهد بود.
این توکن را برای آزمایش درخواستهای محافظتشده کپی کنید. در پروژه واقعی، اپلیکیشن باید آن را در فضای ذخیرهسازی امن مناسب سیستمعامل نگهداری کند.
درخواست سوم: دریافت اطلاعات کاربر
اکنون باید توکن دریافتی را در هدر درخواست قرار دهید.
تنظیمات:
- Method:
GET - URL:
http://127.0.0.1:8000/api/user
هدرهای زیر را اضافه کنید:
Accept: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
بهجای YOUR_ACCESS_TOKEN مقدار واقعی توکن را قرار دهید.
اگر توکن معتبر باشد، اطلاعات کاربر فعلی برگردانده میشود. اگر توکن را حذف کنید یا مقدار نامعتبری ارسال کنید، باید پاسخ عدم احراز هویت دریافت کنید.
درخواست چهارم: خروج از حساب
تنظیمات:
- Method:
POST - URL:
http://127.0.0.1:8000/api/logout
هدرها:
Accept: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
در صورت موفقیت، توکن فعلی حذف میشود.
پس از آن، همان توکن را مجدداً برای درخواست /api/user استفاده کنید. انتظار میرود درخواست دیگر احراز هویت نشود.
مرحله هشتم: ارسال درخواست از اپلیکیشن موبایل
پس از آماده شدن API، اپلیکیشن موبایل باید بتواند درخواستها را به سرور ارسال کند.
فرقی نمیکند اپلیکیشن با Flutter، Kotlin، Swift یا فناوری دیگری ساخته شده باشد؛ اصول ارتباط با API مشابه است:
- درخواست HTTP ارسال میشود.
- دادهها معمولاً با فرمت JSON منتقل میشوند.
- سرور درخواست را اعتبارسنجی و پردازش میکند.
- نتیجه با کد وضعیت HTTP و پاسخ JSON برگردانده میشود.
- اپلیکیشن نتیجه را بررسی و در رابط کاربری نمایش میدهد.
برای مثال، پس از ورود موفق، اپلیکیشن توکن را به شکل امن نگهداری میکند و هنگام درخواست اطلاعات کاربر، آن را در هدر Authorization قرار میدهد.
نمونه مفهومی درخواست:
GET /api/user HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
در این مثال، api.example.com دامنه نمونه است و باید با دامنه واقعی API جایگزین شود.
نکته مهم: توکن را داخل URL، پارامترهای Query String یا پیامهای خطای قابل مشاهده قرار ندهید. هدر Authorization روش معمول ارسال توکن Bearer است.
مرحله نهم: مدیریت پاسخها و خطاهای API
یک API استاندارد باید پاسخ قابل پیشبینی داشته باشد تا اپلیکیشن بتواند بر اساس آن تصمیم بگیرد.
وضعیتهای مهم HTTP در این پروژه عبارتاند از:
| کد وضعیت | مفهوم | مثال |
|---|---|---|
200 OK | درخواست موفق | دریافت اطلاعات کاربر |
201 Created | منبع جدید ایجاد شده | ثبتنام موفق |
401 Unauthorized | احراز هویت انجام نشده یا معتبر نیست | توکن نامعتبر |
403 Forbidden | کاربر احراز هویت شده، اما مجوز لازم را ندارد | عملیات غیرمجاز |
422 Unprocessable Content | دادههای ورودی معتبر نیستند | ایمیل نامعتبر یا فیلد ناقص |
429 Too Many Requests | تعداد درخواستها از حد مجاز بیشتر شده | محدودیت ورود |
Laravel معمولاً خطاهای Validation را با وضعیت 422 و جزئیات فیلدهای نامعتبر برمیگرداند، مشروط بر اینکه درخواست بهعنوان درخواست JSON شناخته شود.
برای مثال، اگر رمز عبور کوتاه باشد، پاسخ میتواند مشابه ساختار زیر باشد:
{
"message": "The given data was invalid.",
"errors": {
"password": [
"The password field must be at least 8 characters."
]
}
}
متن دقیق پیامها ممکن است بر اساس زبان و تنظیمات برنامه متفاوت باشد.
برای تجربه کاربری بهتر، میتوانید پیامهای اعتبارسنجی را فارسی کنید و ساختار پاسخهای API را در سراسر پروژه یکسان نگه دارید.
مرحله دهم: نکات امنیتی مهم در ساخت API موبایل
ساخت API تنها به تعریف چند Route و بازگرداندن JSON محدود نمیشود. اگر قرار است API در یک اپلیکیشن واقعی استفاده شود، باید از ابتدا اصول امنیتی را رعایت کنید.
۱. از HTTPS استفاده کنید
در محیط عملیاتی، API باید از طریق HTTPS در دسترس باشد تا اطلاعات در مسیر انتقال رمزگذاری شوند.
ارسال رمز عبور یا توکن از طریق ارتباط HTTP ناامن میتواند اطلاعات کاربران را در معرض خطر قرار دهد.
۲. توکن را در اپلیکیشن امن نگهداری کنید
توکن احراز هویت را در فایلهای عمومی، تنظیمات قابل انتشار یا فضای ذخیرهسازی ناامن قرار ندهید.
از قابلیتهای امن سیستمعامل استفاده کنید؛ برای مثال، Keychain در iOS و Android Keystore همراه با راهکار ذخیرهسازی امن مناسب در Android.
۳. برای توکنها سیاست انقضا تعریف کنید
توکنهای Sanctum بهصورت پیشفرض تا زمان لغو شدن معتبر میمانند، مگر اینکه انقضا برای آنها پیکربندی شده باشد. <Cite refs={["turn765931search0","turn609554view0"]}/>
برای پروژه واقعی، بهتر است سیاست مشخصی برای طول عمر توکنها داشته باشید. همچنین میتوانید توکنهای منقضیشده را با دستور مربوط به پاکسازی توکنهای Sanctum حذف کنید.
۴. توکن هر دستگاه را جداگانه مدیریت کنید
در این پروژه، هنگام ورود هر دستگاه یک توکن جدید ایجاد میشود. این کار امکان مدیریت نشستهای مختلف را فراهم میکند.
برای مثال، اگر کاربر گوشی خود را گم کند، میتوانید امکان لغو توکن همان دستگاه را از پنل حساب کاربری فراهم کنید؛ بدون اینکه لزوماً تمام دستگاههای دیگر از حساب خارج شوند.
۵. اطلاعات حساس را در پاسخ API برنگردانید
رمز عبور، هش رمز عبور، توکنهای خصوصی و اطلاعات حساس داخلی نباید در پاسخهای عمومی API قرار بگیرند.
در مثال این مقاله، فقط شناسه، نام و ایمیل کاربر را برمیگردانیم. در پروژههای بزرگتر میتوانید از API Resource برای کنترل ساختار خروجی استفاده کنید.
۶. احراز هویت را با مجوزدهی اشتباه نگیرید
داشتن توکن معتبر به این معنی نیست که کاربر اجازه دسترسی به تمام اطلاعات را دارد.
برای مثال، اگر API سفارشها را ارائه میدهد، باید علاوه بر احراز هویت، بررسی کنید سفارش متعلق به همان کاربر باشد. در غیر این صورت، مهاجم ممکن است با تغییر شناسه سفارش به اطلاعات دیگران دسترسی پیدا کند.
۷. از Rate Limiting استفاده کنید
محدودسازی درخواستها برای کاهش حملات خودکار، تلاشهای مکرر ورود و مصرف بیش از حد منابع ضروری است.
محدودیتها را برای مسیرهای حساس مانند ورود، ثبتنام، ارسال کد تأیید و بازیابی رمز عبور با سیاست متناسب تنظیم کنید.
۸. اعتبارسنجی سمت سرور را جدی بگیرید
هر دادهای که از اپلیکیشن دریافت میکنید باید در سرور اعتبارسنجی شود. حتی اگر فرم موبایل مقادیر را بررسی میکند، نمیتوان به آن اعتماد کرد؛ زیرا درخواستها ممکن است مستقیماً و با ابزارهای دیگر ارسال شوند.
مرحله یازدهم: تفاوت Laravel Sanctum و Passport چیست؟
Laravel دو ابزار شناختهشده برای احراز هویت API دارد: Sanctum و Passport.
Laravel Sanctum برای بسیاری از APIهای معمول، اپلیکیشنهای موبایل و SPAها انتخاب ساده و مناسبی است. در این آموزش از همین ابزار استفاده کردیم.
Laravel Passport برای سناریوهایی مناسب است که به امکانات کامل پروتکل OAuth2 نیاز دارند؛ برای مثال، در بعضی سامانههایی که چند کلاینت و جریانهای مجوزدهی استاندارد دارند.
برای یک اپلیکیشن موبایل معمولی که به ثبتنام، ورود و دریافت توکن نیاز دارد، اغلب لازم نیست پیچیدگی OAuth2 را از ابتدا وارد پروژه کنید. انتخاب نهایی باید بر اساس معماری و نیازهای امنیتی انجام شود. <Cite refs={["turn765931search1","turn765931search5"]}/>
مرحله دوازدهم: توسعه API برای قابلیتهای بیشتر
پس از پیادهسازی احراز هویت، میتوانید APIهای دیگری را برای اپلیکیشن توسعه دهید.
برای مثال:
- دریافت فهرست محصولات
- مشاهده جزئیات محصول
- ثبت و پیگیری سفارش
- مدیریت پروفایل کاربر
- بارگذاری تصویر
- ارسال اعلان
- دریافت سوابق خرید
- مدیریت علاقهمندیها
- اتصال به درگاه پرداخت
- ارسال و دریافت پیامهای پشتیبانی
در این مرحله بهتر است برای خروجی منابع از API Resource، برای اعتبارسنجی پیچیده از Form Request و برای کنترل دسترسی از Policy یا Gate استفاده کنید.
همچنین اگر نسخهبندی API برایتان اهمیت دارد، میتوانید ساختار مسیرها را به شکل /api/v1/... طراحی کنید. چون Laravel بهصورت پیشفرض پیشوند /api را اعمال میکند، باید فقط بخش v1 را در مسیرهای تعریفشده اضافه کنید.
پرسشهای متداول
آیا با Laravel میتوان برای اپلیکیشن اندروید و iOS API ساخت؟
بله. Laravel میتواند بکاند مشترکی برای اپلیکیشنهای اندروید و iOS فراهم کند. اپلیکیشنها از طریق درخواستهای HTTP به API متصل میشوند و معمولاً اطلاعات را با فرمت JSON دریافت میکنند.
آیا برای ساخت API در Laravel باید از Sanctum استفاده کنیم؟
خیر، اما Sanctum برای بسیاری از پروژههایی که به احراز هویت توکنی نیاز دارند گزینه مناسبی است. انتخاب ابزار احراز هویت به نوع کلاینت، نیاز امنیتی و معماری سیستم بستگی دارد.
توکن Bearer چیست؟
توکن Bearer مقداری است که کلاینت در هدر Authorization ارسال میکند. سرور با بررسی اعتبار توکن، هویت کاربر را مشخص میکند. هر شخصی که به توکن دسترسی پیدا کند ممکن است بتواند از آن استفاده کند؛ بنابراین نگهداری امن آن ضروری است.
آیا بعد از خروج، توکن کاربر حذف میشود؟
در پیادهسازی این مقاله، توکن مربوط به درخواست جاری لغو میشود. سایر توکنهای کاربر، مانند توکن دستگاههای دیگر، بهطور خودکار حذف نمیشوند.
آیا میتوان API را با Postman آزمایش کرد؟
بله. میتوانید درخواستهای POST برای ثبتنام و ورود و درخواست GET برای دریافت اطلاعات کاربر ارسال کنید. برای مسیرهای محافظتشده باید توکن را در هدر Authorization قرار دهید.
چرا API بهجای JSON صفحه ورود HTML نمایش میدهد؟
این رفتار ممکن است زمانی رخ دهد که درخواست بهعنوان درخواست JSON شناخته نشود یا تنظیمات مسیر و Middlewareها مناسب نباشند. هدر Accept: application/json را ارسال کنید و مطمئن شوید Route در فایل routes/api.php تعریف شده است.
جمعبندی
در این مقاله یاد گرفتیم چگونه با Laravel و Sanctum یک API برای اپلیکیشن موبایل بسازیم. ابتدا API Routing و Sanctum را آماده کردیم، سپس مدل User را برای صدور توکن تنظیم کردیم و کنترلر مربوط به ثبتنام، ورود، دریافت اطلاعات کاربر و خروج را ساختیم.
در ادامه، Routeهای عمومی و محافظتشده را تعریف کردیم، درخواستها را با Postman یا Talend API Tester آزمایش کردیم و نکات مهم امنیتی مانند HTTPS، ذخیره امن توکن، محدودسازی درخواستها و کنترل دسترسی را بررسی کردیم.
با این ساختار، میتوانید توسعه بکاند اپلیکیشن موبایل را ادامه دهید و قابلیتهایی مانند محصولات، سفارشها، پرداخت و اعلانها را به API اضافه کنید.
منابع رسمی برای مطالعه بیشتر:
- مستندات Laravel Sanctum: https://laravel.com/docs/sanctum
- مستندات احراز هویت Laravel: https://laravel.com/docs/authentication
- مستندات Routing در Laravel: https://laravel.com/docs/routing





