אנו בונים צד-שרת (Backend) ב-Laravel עבור אפליקציות מובייל—לא בחירה "זולה", אלא פרקטית. כאשר כבר יש לכם צוות PHP, או כאשר אתם צריכים API עובד עם אימות, התראות Push, אחסון קבצים ותורים תוך 4–6 שבועות, Laravel Sanctum + Eloquent + Horizon מכסה 90% מהמשימות ללא תשתית נוספת. הניסיון שלנו: 5+ שנים ו-30+ פרויקטים, עם אחריות על איכות קוד ואבטחה.
למה Laravel לצד-שרת למובייל?
Laravel מספק פתרונות מוכנים למשימות טיפוסיות של צד-שרת למובייל: אימות, תורים, מטמון (Caching), REST API. זה מקצר את זמן הפיתוח ומפשט את התחזוקה. אנחנו לא רק משתמשים בהגדרות ברירת המחדל—אנו מיישמים אופטימיזציות לעומסים גבוהים.
טעויות נפוצות בצד-שרת Laravel
בעיית Eloquent N+1 הורגת API למובייל. User::all() עם ->posts בתוך foreach הוא קלאסי. עם 30 פריטים מקבלים 31 שאילתות, זמן תגובה 600ms במקום 20ms. לקוח המובייל ממתין, ואז מנסה שוב, ואז ביקורת רעה בחנות. פתרון: with(['posts']) בעת טעינה, ->load() אם כבר נטען. אנו מאבחנים עם Laravel Debugbar או Telescope וסופרים שאילתות כפולות.
תורים ללא Supervisor. Mail::send() או Push של FCM בתוך handler של HTTP—הבקשה נתקעת עד ש-Firebase מגיב. אם APNs מאחר (וזה קורה), לקוח המובייל מקבל timeout של 30 שניות. כל הפעולות האסינכרוניות עוברות ל-dispatch(new SendPushJob($payload)) עם Laravel Horizon לניטור תורי Redis.
איך אנו בונים צד-שרת Laravel למובייל
אימות: Laravel Sanctum לאימות מבוסס-טוקן ל-SPA/מובייל. טוקנים נשמרים בטבלת personal_access_tokens; בעת התחברות אנו מנפיקים זוג access + refresh. Sanctum לא מטפל ברוטציית refresh מחוץ לקופסה—אנו מיישמים זאת דרך RefreshTokenController מותאם שמבטל את הטוקן הישן במסד הנתונים.
ל-OAuth דרך רשתות חברתיות: Laravel Socialite עם דרייברים של Google, Facebook, Apple. Apple Sign In דורש תשומת לב מיוחדת: nonce מאומת ב-id_token, ואת email ש-Apple מספקת רק בהתחברות הראשונה—אנו שומרים אותו מיד.
התראות Push: חבילות laravel-notification-channels/fcm ל-FCM ו-laravel-notification-channels/apn ל-APNs. התראות נשלחות דרך Laravel Notifications API ($user->notify(new OrderStatusChanged($order))), והערוץ נבחר לפי via().
איך אנו מייעלים שאילתות Eloquent
מקרה אמיתי: מרקטפלייס ל-iOS/Android, כ-25,000 משתמשים פעילים יומית (DAU). REST API על Laravel 10, PostgreSQL, Redis לסשנים ומטמון. נקודת קצה לקטלוג מוצרים (/api/v1/products) עם פילטרים ופאג'ינציה. גרסה ראשונה: Eloquent עם ->paginate(20), זמן תגובה 350–800ms תלוי בפילטרים. לאחר אופטימיזציה: שאילתה גולמית דרך DB::select() לבחירה מורכבת + Cache::remember() ל-60 שניות על פילטרים פופולריים—p95 ירד ל-40ms. לקוח המובייל הפסיק להציג את ה-skeleton loader.
| סוג שאילתה | זמן תגובה (p95) | שאילתות SQL |
|---|---|---|
Eloquent ללא app/ ├── Http/Controllers/Api/V1/ — контроллеры с версионированием ├── Http/Resources/ — API Resources для форматирования ответов ├── Http/Requests/ — Form Request validation ├── Models/ — Eloquent-модели ├── Jobs/ — асинхронные задачи (пуши, письма, вебхуки) └── Notifications/ — Laravel Notifications routes/api.php — роуты с `sanctum` middleware |
600 ms | 31 |
Eloquent עם ->toArray() |
120 ms | 2 |
| שאילתה גולמית + Cache | 40 ms | 1 (או 0 מהמטמון) |
מבנה פרויקט ה-API
app/
├── Http/Controllers/Api/V1/ — контроллеры с версионированием
├── Http/Resources/ — API Resources для форматирования ответов
├── Http/Requests/ — Form Request validation
├── Models/ — Eloquent-модели
├── Jobs/ — асинхронные задачи (пуши, письма, вебхуки)
└── Notifications/ — Laravel Notifications
routes/api.php — роуты с `sanctum` middlewareחשוב להשתמש ב-API Resources במקום whenLoaded() ישירות. Resources שולטים בשדות התגובה, טוענים קשרים רלוונטיים דרך laravel-notification-channels/fcm ללא סיכון ל-N+1, ומבנה התגובה לא משתנה במפתיע כשהמודל משתנה.
איך להגדיר Laravel להתראות Push
- התקינו חבילה
app/Notifications/PushNotification.php. - צרו מחלקת notification בשם
via(). - הגדירו מתודת
['fcm']—החזירוtoFcm(). - ב-
FcmMessageהחזירו מופע$user->notify(new PushNotification($data))עם כותרת וגוף. - שליחה:
octane:table.
פריסה (Deployment)
Laravel Octane (Swoole או RoadRunner) נותן שיפור של פי 3–5 בתפוקה לעומת PHP-FPM—רלוונטי אם התקציב שלכם לא מאפשר סקיילינג אופקי. ב-Swoole, שימו לב: מאפייני מחלקה סטטיים נשמרים בין בקשות, ServiceProvider לא נוצר מחדש—יש לאפס מצב במפורש דרך php artisan queue:work --queue=high,default --sleep=3 --tries=3 או להימנע משירותים עם מצב (stateful).
Supervisor לתורים: php artisan queue:work --queue=high,default --sleep=3 --tries=3. Laravel Horizon מספק ממשק אינטרנט לניטור עובדים ומדדי תורי Redis.
מה כלול
- עיצוב ארכיטקטורת API
- נקודות קצה RESTful עם versioning
- אימות (Sanctum/Passport) ו-OAuth2
- התראות Push (FCM, APNs)
- תורים ומשימות רקע (Jobs, Horizon)
- אופטימיזציית שאילתות (Eager Loading, Cache)
- תיעוד (Scribe/OpenAPI)
- פריסה וניטור
- הדרכת צוות (2–3 מפגשים)
לוחות זמנים ועלות
לוחות זמנים: API עם 12–18 נקודות קצה — 3–5 שבועות. מרקטפלייס מורכב — 8–12 שבועות. העלות מחושבת באופן אישי לפי היקף העבודה. נבחן את הפרויקט שלכם—צרו קשר.
פרטים נוספים
אנו משתמשים ב-Continuous Integration (GitLab CI/GitHub Actions) לבדיקות אוטומטיות ופריסה. הקוד מכוסה בבדיקות יחידה (PHPUnit) ובדיקות אינטגרציה לתרחישים קריטיים.הזמינו פיתוח turnkey—קבלו צד-שרת אמין שלא יאכזב אתכם בעומס שיא. פנו אלינו לייעוץ.







