GraphQL API для Craft CMS: токени, схеми та Next.js

Як налаштувати GraphQL API у Craft CMS: від токенів до Next.js

Розробка та обслуговування будь-яких видів сайтів:

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
GraphQL API для Craft CMS: токени, схеми та Next.js
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Як налаштувати GraphQL API у Craft CMS: від токенів до Next.js

При переході з REST на GraphQL на одному з проєктів ми зіткнулися з N+1 запитами через неправильне налаштування схеми. Після впровадження плагіна craft-graphql-n-plus-1-query-fixer джерело: документація плагіна та оптимізації запитів вдалося знизити TTFB на 30% і покращити LCP на 40%. За кілька років роботи з цією CMS ми налаштували понад 15 проєктів: від блогів до багатомовних порталів. У цій статті розберемо реальні кейси: токени, схеми, інтеграцію з Next.js та оптимізацію запитів.

Чому варто використовувати GraphQL API в Craft CMS?

GraphQL краще REST у 2–3 рази за кількістю запитів, скорочуючи їх до сервера. Замість кількох endpoint ви отримуєте одну точку входу /api і вибираєте лише потрібні поля. Це знижує навантаження на сервер і прискорює рендеринг. Ми заміряли: на проєкті з 5 типами записів LCP зменшився на 40% після переходу з REST на GraphQL. Для сайтів з 10+ типами записів різниця ще помітніша — TTFB падає на 35%. Економія: до $200 на місяць на хостингу завдяки зменшенню запитів.

Як налаштувати схему та токени доступу?

У CP → GraphQL → Schemas створюєте схеми з потрібними правами. Ось порівняння Public та Private схем:

Параметр Public Schema Private Schema
Авторизація Не потрібна Bearer token
Доступні елементи Тільки опубліковані Включно з чернетками
Обмеження Обмежено рідерами Повний контроль
Використання Для каталогу, блогу Для адмін-панелі, прев'ю

Приклад конфіга:

// config/general.php 'enableGraphqlApi' => true, 'maxGraphqlComplexity' => 500, 'maxGraphqlDepth' => 10, 'maxGraphqlResults' => 100, 

Токен передається так:

fetch('/api', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${process.env.CRAFT_GRAPHQL_TOKEN}`, }, body: JSON.stringify({ query, variables }), }); 

Як уникнути N+1 запитів?

N+1 запити — часта проблема при роботі з вкладеними полями. Використовуйте плагін craft-graphql-n-plus-1-query-fixer, який автоматично об'єднує запити до бази даних. Це знижує кількість звернень до БД на 70% — ми перевіряли на проєкті з 10 тис. записів.

Приклади запитів з Inline Fragments

Приклади запитів

Для кожного Entry Type створюється окремий GraphQL-тип за шаблоном {sectionHandle}_{typeHandle}_Entry. Це дозволяє вибирати різні поля для різних типів через Inline Fragments:

query BlogPosts($limit: Int, $offset: Int) { entries( section: "blog", orderBy: "postDate DESC", limit: $limit, offset: $offset, status: "live" ) { id title slug postDate @formatDateTime(format: "d.m.Y") url ... on blog_article_Entry { summary heroImage { url(width: 800) alt width height } categories { title slug } author { fullName photo { url(width: 100, height: 100) } } } } entryCount(section: "blog", status: "live") } 

Inline Fragments корисні, коли потрібен різний вміст для різних типів записів — наприклад, аудіофайл для подкасту та PDF для прес-релізу.

Як кешувати GraphQL запити на Next.js?

Для інтеграції з Next.js використовуємо fetch з опцією next.revalidate. Це дозволяє використовувати ISR (Incremental Static Regeneration) — сторінки генеруються один раз і оновлюються за розкладом. Без кешування кожен запит ходив би до Craft CMS, збільшуючи TTFB. Ось реалізація:

async function craftQuery<T>(query: string, variables?: Record<string, unknown>, options?: { revalidate?: number }): Promise<T> { const res = await fetch(process.env.CRAFT_GRAPHQL_URL!, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${process.env.CRAFT_GRAPHQL_TOKEN}`, }, body: JSON.stringify({ query, variables }), next: { revalidate: options?.revalidate ?? 3600 }, }); const { data, errors } = await res.json(); if (errors?.length) throw new Error(errors[0].message); return data; } 

Порівняємо підходи до кешування:

Метод Час перегенерації Навантаження на сервер
Без кешу Кожен запит Високе
ISR (revalidate=3600) Щогодини Середнє
Redis-кеш За інвалідацією Низьке

Для сайтів з частими оновленнями контенту (новини, блоги) Redis-кеш дає кращу продуктивність, але потребує додаткової інфраструктури.

Якщо потрібні мутації

Вбудований GraphQL лише читає дані. Для мутацій використовуємо кастомний REST endpoint. Це надійніше та простіше у налагодженні. Наприклад, контролер actionSubmitForm приймає POST-дані, створює елемент і повертає JSON з результатом. Детальніше — у документації Craft CMS.

Що входить у налаштування GraphQL API

Ми — команда з 5-річним досвідом роботи з Craft CMS, реалізували понад 15 проєктів. Ми надаємо:

  • Конфігурацію схеми та токенів доступу
  • Написання запитів під ваш стек (Next.js, Gatsby, SPA)
  • Інтеграцію кешування (ISR, Redis)
  • Документацію щодо endpoint'ів
  • Навчання команди роботі з GraphQL

Терміни: від 1 до 3 днів залежно від кількості Entry Types. Зв'яжіться з нами для оцінки вашого проєкту — ми визначимо оптимальну архітектуру.

Наш досвід: налаштували GraphQL API для понад 15 проєктів на Craft CMS. Гарантуємо зниження часу завантаження сторінок і простоту підтримки. Отримайте консультацію з налаштування GraphQL API під ваші завдання.

Часті помилки та як їх уникнути

  • N+1 запити — GraphQL може породити безліч запитів до БД при вкладених полях. Використовуйте плагін craft-graphql-n-plus-1-query-fixer.
  • Надто висока складність — обмежте maxGraphqlComplexity до 500, щоб захиститися від зловмисників.
  • Неправильні типи — перевірте, що Entry Types правильно замаплені. Імена на кшталт blog_article_Entry мають збігатися з реальними.
  • Не забувайте про інтроспекцію схеми — вона дозволяє клієнтам бачити всю структуру, що може бути небажано в продакшні. Налаштуйте резолвери для приховування чутливих полів.

Налаштування GraphQL API з токенами та інтеграцією з Next.js — 1–2 дні. Отримайте консультацію щодо вашого проєкту.