ProcessWire Headless CMS: מדריך REST API ו-GraphQL

כשעסק צומח מעבר לאתר סטנדרטי וזקוק לחיבור ל-SPA או לאפליקציה ניידת, עיבוד PHP מסורתי הופך ללא נוח. אנו מגדירים את ProcessWire כ-CMS headless, ומספקים תוכן דרך REST, GraphQL או JSON API על גבי תבניות קיימות. הצוות שלנו מוסר את הפרויקט במפתח מלא—מביקורת ועד הטמעה—תוך הבטחת פעילות אמינה ותמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
ProcessWire Headless CMS: מדריך REST API ו-GraphQL
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

בניית 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 (מדליף נתונים מיותרים, תגובה איטית)
  • ללא מטמון—כל בקשה פוגעת במסד הנתונים

אנחנו מתחשבים בכל זה מהיום הראשון.

איך אנחנו עושים זאת: שלבים

  1. ניתוח: לימוד מבנה התבניות והשדות; קביעת נקודות הקצה הנדרשות.
  2. עיצוב: מיפוי סכמת הנתונים והחלטה מה לחשוף ללקוח.
  3. יישום: כתיבת ראוטר התבניות או הגדרת GraphQL; הקמת מטמון.
  4. בדיקות: אימות כל נקודות הקצה; ביצוע בדיקות עומס (100 בקשות במקביל).
  5. פריסה: העלאה לשרת הייצור; הקמת ניטור.

אנחנו מבטיחים תוצאה: אם ה-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 שהושלמו, אנו מבטיחים אספקה אמינה. קבלו ייעוץ לפרויקט שלכם—צרו קשר ונספק הערכה תוך יום אחד.