מפתחיםAPI תוכן ציבורי

REST ו־JSON פשוטים. סגור עד שתפתחו.

הגדרות ה־API הציבורי לכל אתר קובעות בדיוק מה נחשף ולמי. שולפים תוכן שפורסם, מפות אתר והפניות באותו מבנה JSON צפוי בכל מקום — בלי סכמת GraphQL ללמוד ובלי לקוח מחולל שצריך לסנכרן. כל בקשה למטה אמיתית: בלוג שבנוי על CMSHub, נקרא עם curl בלבד.

01 / שולפים תוכן שפורסם

בקשת GET אחת, רשומות שפורסמו כ־JSON

ברגע שאתר מצטרף ומוסיף אוסף לרשימת ההיתרים, הרשומות שפורסמו בו נמצאות במרחק GET פשוט — מזוהות כולן מכותרת ה־Host, בלי צורך במפתח API לנתונים ציבוריים.

  • רק רשומות PUBLISHED מוחזרות אי פעם — טיוטות וגרסאות שלא פורסמו לא דולפות דרך הנתיב הציבורי.
  • חסום כברירת מחדל: מארח לא מוכר, אתר מושבת או אוסף שלא ברשימת ההיתרים — כולם מחזירים 404 באותו אופן.
  • ‏?locale=xx מחזיר את הגרסה שפורסמה בשפה הזו, עם נפילה לשפת ברירת המחדל של סביבת העבודה.
GEThttps://the-signal.blog/api/posts
curl https://the-signal.blog/api/posts
RESPONSE
{
  "siteId": "the-signal-4f2a",
  "siteName": "The Signal",
  "baseUrl": "https://the-signal.blog",
  "collection": {
    "id": "3b0d6f2a-9c41-4e8a-8f2e-1d4c9a7b6e11",
    "slug": "posts",
    "name": "Posts"
  },
  "data": [
    {
      "id": "a91f2e3c-7d5b-4a10-9c3e-6f8a2b1d0e44",
      "locale": "en",
      "translationOfId": null,
      "data": {
        "title": "Shipping a public content API without a GraphQL schema",
        "slug": "shipping-a-public-content-api",
        "excerpt": "Plain REST beats a bespoke query language when a frontend just needs JSON.",
        "category": "Engineering",
        "author": "Dana Osei",
        "published_at": "2026-09-10"
      }
    },
    {
      "id": "d2c5b8a1-4e3f-4c9d-8b7a-2f1e6d5c4b33",
      "locale": "en",
      "translationOfId": null,
      "data": {
        "title": "What the quality gate actually checks before you publish",
        "slug": "the-quality-gate-explained",
        "excerpt": "Every generated page passes the same checks, whether it's post 1 or post 10,000.",
        "category": "Product",
        "author": "Dana Osei",
        "published_at": "2026-09-04"
      }
    }
  ],
  "meta": {
    "locale": "en",
    "pagination": { "start": 0, "limit": 20, "total": 2, "nextCursor": null }
  }
}
02 / גילוי, אוטומטית

מפת אתר שתמיד תואמת למה שבאמת פורסם

sitemap.xml ו־robots.txt נוצרים מאותו מלאי דפים שממנו קורא ה־API לתוכן — אין הגדרה נפרדת לסנכרן ואין מה ליצור מחדש ביד.

  • משקפת את מלאי הדפים החי בכל בקשה — מפרסמים דף, והוא במפת האתר.
  • חלופות hreflang נוספות אוטומטית לכל דף שיש לו גרסאות מתורגמות.
  • הקובץ ‎/robots.txt מפנה את הסורקים לאותו sitemap, לכל אתר.
GEThttps://the-signal.blog/sitemap.xml
curl https://the-signal.blog/sitemap.xml
RESPONSE
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url><loc>https://the-signal.blog/posts/shipping-a-public-content-api</loc><lastmod>2026-09-10T14:22:00.000Z</lastmod></url>
  <url><loc>https://the-signal.blog/posts/the-quality-gate-explained</loc><lastmod>2026-09-04T09:15:00.000Z</lastmod></url>
</urlset>
03 / סגור כברירת מחדל

אתם מחליטים מה אתר חושף

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

הגדרה לכל אתר

מפעילים ומגדירים את ה־API הציבורי בנפרד לכל אתר בסביבת העבודה.

רק תוכן שפורסם

ה־API הציבורי מגיש רק את מה שעבר את שער האיכות ובאמת פורסם — אף פעם לא טיוטות.

עם גרסאות, יציב

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

קראו לנקודת קצה אמיתית

הפעילו את ה־API הציבורי לאתר.

הפעילו את ה־API הציבורי לתוכן באחד האתרים שלכם ושלפו דף שנוצר.