Налаштування Statamic як Headless CMS через REST/GraphQL API

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Statamic як Headless CMS через REST/GraphQL API
Середня
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Statamic як Headless CMS через REST/GraphQL API

Statamic підтримує headless-режим через вбудований Content API (REST) та офіційний GraphQL аддон. REST API доступен у безплатній версії, GraphQL — у Pro.

REST API

Включення у config/statamic/api.php:

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,
  ],
];

Доступні endpoints:

GET /api/v1/collections
GET /api/v1/collections/{collection}/entries
GET /api/v1/collections/{collection}/entries/{id}
GET /api/v1/taxonomies/{taxonomy}/terms
GET /api/v1/globals
GET /api/v1/globals/{handle}
GET /api/v1/assets/{container}

Фільтрація та вибір через REST

// Список постів з фільтрацією
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 API (Pro)

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
  }
}

Кастомний GraphQL-тип

// Розширення схеми через аддон
use Statamic\Facades\GraphQL;
use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type;

GraphQL::addType(new ObjectType([
  'name'   => 'PostStats',
  'fields' => [
    'views' => ['type' => Type::int()],
    'likes' => ['type' => Type::int()],
  ],
]));

// Додавання поля до існуючого типу Entry
GraphQL::addField('Entry_Blog_Post', 'stats', function () {
  return [
    'type'    => GraphQL::type('PostStats'),
    'resolve' => function ($entry) {
      return [
        'views' => PostStats::getViews($entry->id()),
        'likes' => PostStats::getLikes($entry->id()),
      ];
    },
  ];
});

Next.js + Statamic REST

// lib/statamic.ts
const BASE = process.env.STATAMIC_URL!;

export async function getBlogPosts(page = 1) {
  const url = new URL(`${BASE}/api/v1/collections/blog/entries`);
  url.searchParams.set('filter[status]', 'published');
  url.searchParams.set('sort', '-date');
  url.searchParams.set('page[size]', '12');
  url.searchParams.set('page[number]', String(page));

  const res = await fetch(url.toString(), {
    next: { revalidate: 3600, tags: ['blog'] },
  });
  return res.json();
}

// Webhook для revalidation при публікації
// Statamic → CP → Utilities → API → Webhooks
// Event: entry:saved → POST https://nextjs.app/api/revalidate

Налаштування REST API з базовими endpoints — 4–8 годин. GraphQL з кастомними типами — 1–2 дні.