בניית API ל-Headless CMS עם ProcessWire
ארגון אספקת תוכן באמצעות ProcessWire API
פרויקט ProcessWire פועל כבר מספר שנים, עם עשרות תבניות שנצברו. ואז הלקוח דורש React SPA או אפליקציית מובייל. עיבוד PHP סטנדרטי לא יעבוד—הם צריכים JSON נקי. אפשר לאלתר משהו עם גישה ישירה למסד הנתונים, אבל זה שובר את לוגיקת ההרשאות ואת המטמון. הפתרון הנכון הוא להוסיף HTTP API על גבי התבניות הקיימות. אנחנו עושים זאת ב-2–4 ימים באמצעות כלים מובנים: ראוטר תבניות או מודול GraphQL. בלי שכתוב—רק נקודת קצה חדשה.
השלמנו למעלה מ-30 פרויקטים כאלה. התצורה העמוסה ביותר מטפלת בעד 100,000 בקשות ביום על VPS תקציבי. ה-API פועל ללא תקלות כבר למעלה משנתיים. להלן נפרט את אפשרויות היישום.
PHP API מובנה
ProcessWire חושף את $pages, $page, $user ו-$config כמשתנים גלובליים בתבניות:
// templates/blog.php
// Выборка с фильтрами и пагинацией
$limit = 12;
$start = ($input->pageNum - 1) * $limit;
$posts = $pages->find("template=blog-post, status=published, sort=-date, limit=$limit, start=$start");
$totalPosts = $pages->count("template=blog-post, status=published");
// Выборка с условиями по полям
$featuredPosts = $pages->find(" template=blog-post, featured=1, date>=today, category.name%=Web Development, sort=-date, limit=3 ");
// Один элемент
$post = $pages->get("template=blog-post, slug=my-post-slug");
if (!$post->id) wire404();
עבור ProcessWire JSON API מלא, אנו יוצרים נקודות קצה REST מותאמות אישית באמצעות תבניות ProcessWire API, המאפשרות פיתוח SPA חלק של ProcessWire headless.
מחרוזת סלקטור—שפת שאילתות
// Текстовый поиск
$pages->find("template=product, title*=laptop, sort=title");
// Числовые условия
$pages->find("template=product, price>=1000, price<=5000");
// Дата
$pages->find("template=event, event_date>=today, sort=event_date");
// OR-условия
$pages->find("template=post, (category=tech|category=science)");
// Связанные страницы
$pages->find("template=product, categories.id={$category->id}");
// Полнотекстовый поиск
$pages->find("title|body~=search query, template=post");
// Сортировка по кастомному полю
$pages->find("template=product, sort=-rating, sort=title");
REST API באמצעות ProCache או מודול מותאם אישית
ProcessWire אינו כולל REST API מובנה. אנו יוצרים אחד באמצעות ראוטר תבניות:
// site/templates/api.php
// URL: /api/blog/?page=1&limit=10
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: ' . $config->httpHost);
// Простая авторизация по ключу
$apiKey = $input->get->text('key');
if ($apiKey !== $config->apiKey) {
http_response_code(401);
echo json_encode(['error' => 'Unauthorized']);
return;
}
$page_num = (int) $input->get->int('page') ?: 1;
$limit = min((int) $input->get->int('limit') ?: 10, 100);
$start = ($page_num - 1) * $limit;
$posts = $pages->find(" template=blog-post, status=published, sort=-date, limit=$limit, start=$start ");
$result = [
'data' => array_map(fn($post) => [
'id' => $post->id,
'title' => $post->title,
'slug' => $post->name,
'url' => $post->url,
'date' => $post->date->format('Y-m-d'),
'excerpt' => $post->excerpt,
'image' => $post->image ? [
'url' => $post->image->width(800)->url,
'width' => 800,
'height' => (int) round(800 / $post->image->ratio),
] : null,
], $posts->getArray()),
'total' => $posts->getTotal(),
'page' => $page_num,
'limit' => $limit,
];
echo json_encode($result);
מודול ProcessWire GraphQL
התקנה דרך מודולי ProcessWire. הורדה מ-processwire.com/modules/processwire-graphql/ והוספת הגדרות ל-config.php:
$config->graphql = [
'templateFilters' => ['blog-post', 'product', 'category'],
'fieldFilters' => ['title', 'body', 'date', 'image', 'category'],
'maxLimit' => 100,
];
query {
blogPost(s: "status=published, sort=-date, limit=10") {
list {
id
title
date
body
image {
url(width: 800)
}
category {
title
url
}
}
total
}
} מטמון תגובות
// Кэш через WireCache
$cacheKey = "api_posts_page{$page_num}";
$cached = $cache->get($cacheKey);
if ($cached) {
echo $cached;
return;
}
// ... формирование $result ...
$json = json_encode($result);
$cache->save($cacheKey, $json, 3600); // 1 час
echo $json;בניית REST API בסיסי על ProcessWire (5–7 נקודות קצה) אורכת 2–4 ימים. השקעה אופיינית: REST API בסיסי מתחיל ב-$2,500, כולל מטמון ותיעוד. אינטגרציית GraphQL מוסיפה $500–$1,500. העלות נקבעת לאחר ניתוח היקף הפרויקט. עלויות אופייניות נעות בין $3,000 ל-$5,000, והגישה שלנו חוסכת לכם 30–40% בהשוואה להעברות CMS חלופיות.
REST לעומת GraphQL עבור ProcessWire
| קריטריון | REST מותאם אישית | ProcessWire GraphQL |
|---|---|---|
| מורכבות יישום | בינונית (ראוטר תבניות) | נמוכה (מודול + קונפיגורציה) |
| מהירות פיתוח | 2–4 ימים | 1–2 ימים |
| שליטה בתגובה | מלאה | מוגבלת על ידי הגדרות |
| טיפוסיות | לא | כן (באמצעות סכמת GraphQL) |
| רמת מטמון | נקודת קצה | שאילתה (באמצעות שאילתות מתמשכות) |
REST עדיף כאשר יש צורך בתגובה מינימלית ובשליטה מלאה. GraphQL עדיף אם לקוחות זקוקים לבחירת שדות גמישה.
ProcessWire כ-Headless CMS: יתרונות
בניגוד ל-WordPress (שם API הוא תוסף מאולתר) או Strapi (כבד), ProcessWire מספק מקור אמת יחיד גם לתבניות PHP וגם ללקוחות חיצוניים. כותבים תבניות פעם אחת, ופלט ה-JSON הוא רק תבנית שנייה עם כותרות שונות. לפי הערכותינו, זה מפחית עלויות תחזוקה ב-30–40%.
תיעוד ProcessWire API מאשר שסלקטורים פועלים באופן זהה בתבניות וב-API.
מה כלול בהקמת ProcessWire API
| שלב | משך | תיאור |
|---|---|---|
| עיצוב | 0.5 יום | סכמת נקודות קצה, סוגי נתונים |
| יישום REST | 1–2 ימים | ראוטר תבניות, אימות, CORS |
| או GraphQL | 0.5–1 יום | מודול, קונפיגורציה, בדיקות |
| מטמון | 0.5 יום | WireCache + Redis |
| תיעוד | 0.5 יום | Postman או Swagger |
| בדיקות ופריסה | 1 יום | בדיקות עומס, ניטור |
תוצרים:
- תיעוד API (Postman/OpenAPI)
- גישה לסביבת staging
- הדרכה של שעה למפתחים שלכם
- 30 ימי תמיכה לאחר פריסה
- קוד מקור וסקריפטי פריסה
טעויות נפוצות בעשייה עצמית
- כותרות CORS שגויות (לא כל השיטות מורשות)
- חוסר במגבלות בקשות (פגיעות אבטחה)
- סריאליזציה של כל אובייקט $page (מדליף נתונים מיותרים, תגובה איטית)
- ללא מטמון—כל בקשה פוגעת במסד הנתונים
אנחנו מתחשבים בכל זה מהיום הראשון.
איך אנחנו עושים זאת: שלבים
- ניתוח: לימוד מבנה התבניות והשדות; קביעת נקודות הקצה הנדרשות.
- עיצוב: מיפוי סכמת הנתונים והחלטה מה לחשוף ללקוח.
- יישום: כתיבת ראוטר התבניות או הגדרת GraphQL; הקמת מטמון.
- בדיקות: אימות כל נקודות הקצה; ביצוע בדיקות עומס (100 בקשות במקביל).
- פריסה: העלאה לשרת הייצור; הקמת ניטור.
אנחנו מבטיחים תוצאה: אם ה-API לא עובד אחרי 4 ימים, נסיים אותו ללא תשלום. ניסיון: 30+ פרויקטי ProcessWire.
ProcessWire REST API מפותח פי 2–3 מהר יותר מאשר ב-WordPress עם תוספים, בזכות תחביר הסלקטור האחיד.
היתרון שלנו: 30+ פרויקטי ProcessWire API
עם ניסיון של 7+ שנים ב-ProcessWire, 30+ פרויקטים ו-5+ שנים בשוק, יש לנו ניסיון מוכח. לאורך שנות העבודה עם ProcessWire, בנינו APIs לפלטפורמות מסחר אלקטרוני, שירותי SaaS ופורטלי תוכן. אנו מכירים את האילוצים הלא מובנים מאליהם: התנהגות // templates/blog.php // Выборка с фильтрами и пагинацией $limit = 12; $start = ($input->pageNum - 1) * $limit; $posts = $pages->find("template=blog-post, status=published, sort=-date, limit=$limit, start=$start"); $totalPosts = $pages->count("template=blog-post, status=published"); // Выборка с условиями по полям $featuredPosts = $pages->find(" template=blog-post, featured=1, date>=today, category.name%=Web Development, sort=-date, limit=3 "); // Один элемент $post = $pages->get("template=blog-post, slug=my-post-slug"); if (!$post->id) wire404(); במצב headless, ניואנסים של ProCache עם אסימוני Bearer, ומוזרויות של קבוצות שדות בסריאליזציה של אובייקטים מקוננים. התצורה העמוסה ביותר מהניסיון שלנו מטפלת ב-100,000 בקשות ביום על שרת עם 4 GB RAM ללא ירידה בביצועים. אנחנו מוכנים לקחת על עצמנו כל מורכבות: מ-REST API בסיסי עם חמש נקודות קצה ועד GraphQL עם שאילתות מתמשכות ומנויים בזמן אמת. שלחו לנו תיאור של הפרויקט שלכם—נציע את המבנה האופטימלי ונעריך את העבודה תוך יום עסקים אחד.
עם ניסיון של למעלה מ-7 שנים בפיתוח ProcessWire ו-30+ פרויקטי API שהושלמו, אנו מבטיחים אספקה אמינה. קבלו ייעוץ לפרויקט שלכם—צרו קשר ונספק הערכה תוך יום אחד.







