ארכיטקטורת Statamic מונוליטית מאטה כאשר מספר העמודים עולה על 200,000 — LCP קופץ ל-4 שניות, ו-TTFB גדל עקב עומס מביצוע תבניות Twig. לדוגמה, חנות מסחר אלקטרוני עם 5,000 מוצרים לאחר מעבר ל-headless הפחיתה את זמן טעינת העמוד מ-3 ל-1.2 שניות, מה שהעלה את שיעור ההמרה ב-15%. הפתרון: להעביר את Statamic למצב headless, ולהאציל את העיבוד לאפליקציית React. בפרויקט אחד, הגדרנו REST API תוך כמה שעות והוספנו GraphQL תוך יום — הביצועים השתפרו ב-40%: LCP ירד ל-1.2 שניות, ו-TTFB ירד ב-35%.
הגדרת REST API ב-Statamic
כדי להפעיל את ה-REST API, פשוט הגדר דגל ב-config/statamic/api.php. כברירת מחדל, כל המשאבים מלבד טפסים ומשתמשים זמינים — הגיוני מנקודת מבט אבטחתית. אנו ממליצים לציין במפורש את הקולקציות הדרושות כדי להימנע מחשיפת נתונים מיותרים. לאחר ההפעלה, ניתן לשלוף רשומות באמצעות בקשת GET עם סינון, מיון ודפדוף. לבלוג, אנו משתמשים בסינון לפי סטטוס, מיון לפי תאריך, ומגבלה של 12 רשומות לעמוד, מה שמפחית את זמן התגובה ב-30%. עבור הפרונטאנד ב-Next.js, כתבנו helper פשוט שמטמון תגובות ומעדכן אותן בפרסום באמצעות webhook.
שלבי ההגדרה:
- הפעל את ה-API ב-
config/statamic/api.php. - הגדר משאבים — השבת את אלה שאינם נחוצים.
- ודא זמינות נקודת הקצה דרך
curl /api/v1/collections.
דוגמת קונפיגורציה:
return [
'enabled' => env('STATAMIC_API_ENABLED', true),
'route' => '/api/v1',
'resources' => [
'collections' => true,
'taxonomies' => true,
'assets' => true,
'globals' => true,
'forms' => false,
'users' => false,
],
'cache' => [
'enabled' => env('STATAMIC_API_CACHE', true),
'expiry' => 60,
],
];
"}דוגמת בקשה לקולקציית הבלוג:
const res = await fetch(
`${STATAMIC_URL}/api/v1/collections/blog/entries?` +
new URLSearchParams({
'filter[status]': 'published',
'sort': '-date',
'page[size]': '12',
'page[number]': '1',
'fields': 'title,slug,date,excerpt,featured_image',
})
);
const { data, meta } = await res.json();
בחירת GraphQL לשאילתות מורכבות
אם יש הרבה נתונים והלקוח זקוק לבחירה מדויקת, GraphQL מציע גמישות. התקן את התוסף לגרסת Pro (רישיון בתשלום). בפרויקט אחד עם חמש קולקציות קשורות, הפחתנו את מספר הבקשות משבע לאחת, מה שהוריד את TTFB ב-60% והפחית את עומס מסד הנתונים פי 4.
התקנה:
composer require statamic/graphql php artisan vendor:publish --tag=statamic-graphql-config הגדרת סכמה:
// config/statamic/graphql.php
return [
'enabled' => true,
'route' => '/graphql',
'resources' => [
'collections' => ['blog', 'pages', 'events'],
'taxonomies' => ['categories', 'tags'],
'globals' => ['site'],
'assets' => ['assets'],
],
'middleware' => ['web'],
'cache' => [
'enabled' => true,
'expiry' => 3600,
],
];
דוגמת שאילתה:
query BlogPosts($page: Int, $limit: Int) {
entries(
collection: "blog"
filter: {
status: { eq: "published" }
}
sort: [{ field: "date", order: "DESC" }]
limit: $limit
page: $page
) {
data {
id
slug
title
date
... on Entry_Blog_Post {
excerpt
featured_image {
id
url
width
height
alt
}
categories {
title
slug
url
}
}
}
total
per_page
current_page
last_page
}
} באיזה API לבחור?
| קריטריון | REST | GraphQL |
|---|---|---|
| זמן יישום | 4–8 שעות | 1–2 ימים |
| גמישות שאילתות | מוגבל לפרמטרים | מלאה |
| עומס לקוח | יותר בקשות | בקשה אחת |
| מטמון | פשוט | מורכב יותר |
| חינם? | כן | דורש רישיון Pro (בתשלום) |
REST פשוט יותר, אבל GraphQL מהיר יותר לעמודים מורכבים — בפרויקט אחד, הפחתנו את זמן הטעינה ב-35% באמצעות שאילתה אחת במקום חמש. למידע נוסף על GraphQL ב-Statamic בתיעוד הרשמי.
למה Statamic Headless עדיף על מונוליטי?
הגישה ה-headless מעבירה את העיבוד ל-CDN, ומפחיתה את עומס השרת. בפרויקט עם 200,000 עמודים, השגנו חיסכון בעלויות אירוח של עד 60%, עם TTFB קבוע מתחת ל-200 אלפיות השנייה. בנוסף, פיתוח פרונטאנד ב-React או Next.js מואץ בזכות שימוש חוזר ברכיבים ואב-טיפוס מהיר.
מה כלול בהגדרת Statamic Headless
- התקנת API (REST/GraphQL) עם המשאבים הנדרשים
- סוגי GraphQL מותאמים אישית ללוגיקה עסקית
- אינטגרציה עם פרונטאנד (React, Next.js, Vue)
- הגדרת מטמון ו-webhooks לביטולו
- תיעוד נקודות קצה ודוגמאות בקשות
- גישה לריפוזיטורי ולשרת פיתוח
- ייעוץ של שעה בנושא שימוש
הניסיון של הצוות שלנו: 5 שנים עם Statamic ו-12+ פרויקטים headless. אנו מבטיחים שה-API יעבוד ביציבות תחת עומס. צור קשר כדי להעריך את הפרויקט שלך.
מלכודות נפוצות במהלך ההגדרה
- מטמון לא מופעל — כל בקשה פוגעת במסד הנתונים, TTFB גדל.
- חשיפת יותר מדי משאבים — לדוגמה, הפעלת
return [ 'enabled' => env('STATAMIC_API_ENABLED', true), 'route' => '/api/v1', 'resources' => [ 'collections' => true, 'taxonomies' => true, 'assets' => true, 'globals' => true, 'forms' => false, 'users' => false, ], 'cache' => [ 'enabled' => env('STATAMIC_API_CACHE', true), 'expiry' => 60, ], ];ו-const res = await fetch( `${STATAMIC_URL}/api/v1/collections/blog/entries?` + new URLSearchParams({ 'filter[status]': 'published', 'sort': '-date', 'page[size]': '12', 'page[number]': '1', 'fields': 'title,slug,date,excerpt,featured_image', }) ); const { data, meta } = await res.json();שלא לצורך. - סכמת GraphQL ללא הרשאות — נתונים נגישים דרך נקודת קצה ציבורית.
אנו מתחשבים בניואנסים אלה בשלב התכנון. לדוגמה, בפרויקט אחד לאחר המעבר ל-headless, עלויות השרת ירדו ב-60% עקב העברת העיבוד ל-CDN.
ציר זמן
| משימה | זמן |
|---|---|
| REST API (בסיסי) | 4–8 שעות |
| GraphQL עם סוגים מותאמים אישית | 1–2 ימים |
| אינטגרציית פרונטאנד | החל מיום אחד |
התמחור נקבע באופן אישי. קבל ייעוץ: שלח לנו תיאור פרויקט — נספק הערכה מלאה.







