في CodeStan، نؤمن ببناء أسس رقمية قوية وقابلة للتوسع. وفي عالمنا المترابط اليوم، هذا يعني غالباً واجهات برمجية التطبيقات (APIs). من تطبيقات الجوال في الرياض إلى تطبيقات الصفحة الواحدة في دبي، APIs هي الأوردة التي تُنقل البيانات بين الأنظمة.
هذا الدليل يعلمك كيفية بناء REST API احترافي باستخدام Laravel. ليس نظرية مجردة. أمثلة واقعية يمكنك متابعتها وبناء شيء حقيقي.
ما سنبنيه
API لإدارة المنتجات. يتضمن:
- إنشاء منتج (POST /api/products)
- قراءة المنتجات (GET /api/products)
- تحديث منتج (PUT /api/products/{id})
- حذف منتج (DELETE /api/products/{id})
- البحث والتصفية
- التوثيق
المتطلبات الأساسية
قبل البدء:
- PHP 8.2+ مثبت على جهازك
- Composer
- MySQL أو SQLite
- معرفة أساسية بـ Laravel
الخطوة الأولى: إعداد المشروع
أنشئ مشروع Laravel جديد:
laravel new product-api
cd product-api
أنشئ قاعدة البيانات وحدث ملف .env:
DB_DATABASE=product_api
DB_USERNAME=root
DB_PASSWORD=your_password
الخطوة الثانية: إنشاء النموذج والهجرة
أنشئ نموذج Product مع الهجرة:
php artisan make:model Product -m
في ملف الهجرة:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->decimal('price', 10, 2);
$table->integer('stock')->default(0);
$table->timestamps();
});
}
شغل الهجرة:
php artisan migrate
الخطوة الثالثة: إنشاء المتحكم
أنشئ متحكم API:
php artisan make:controller Api/ProductController --api
في ProductController:
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
return Product::all();
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'description' => 'nullable|string',
'price' => 'required|numeric|min:0',
'stock' => 'required|integer|min:0',
]);
return Product::create($validated);
}
public function show(Product $product)
{
return $product;
}
public function update(Request $request, Product $product)
{
$validated = $request->validate([
'name' => 'sometimes|string|max:255',
'description' => 'nullable|string',
'price' => 'sometimes|numeric|min:0',
'stock' => 'sometimes|integer|min:0',
]);
$product->update($validated);
return $product;
}
public function destroy(Product $product)
{
$product->delete();
return response()->noContent();
}
}
الخطوة الرابعة: إعداد المسارات
في routes/api.php:
use App\Http\Controllers\Api\ProductController;
Route::apiResource('products', ProductController::class);
الخطوة الخامسة: الاختبار
شغل الخادم:
php artisan serve
اختبر API باستخدام Postman أو curl:
curl -X POST http://localhost:8000/api/products \
-H "Content-Type: application/json" \
-d '{"name":"iPhone 16","price":3999,"stock":50}'
الأخطاء الشائعة وكيفية تجنبها
عدم التحقق من المدخلات: دائماً استخدم التحقق. APIs مفتوحة للعالم. لا تثق بأي مدخل.
غياب التوثيق: استخدم Scribe أو Swagger لتوليد توثيق تلقائي. APIs بدون توثيق صعبة الصيانة.
إرجاع بيانات حساسة: لا تُرجع كلمات مرور أو مفاتيح API في الردود.
استخدم Postman Collection لتوثيق واختبار API. شاركها مع فريقك. التوثيق الحي أفضل من المستندات الثابتة.
الخطوات التالية
بعد بناء API الأساسي:
- أضف المصادقة باستخدام Sanctum
- أضف التصفية والبحث والترتيب
- أضف التخزين المؤقت للاستعلامات المتكررة
- أضف Rate Limiting لحماية API
- أضف الاختبارات الآلية
API جيد ليس الذي يعمل فقط. هو الذي يعمل، يتوسع، ويُفهم.
— فريق CodeStan
إذا كنت تبني API لمشروعك وتريد مراجعة احترافية، تواصل معنا. نراجع الكود ونُقدم توصيات بناءً على أفضل الممارسات.