Налаштування Umbraco Content Delivery API: конфігурація та інтеграція

Коли ваш проєкт потребує від Umbraco роботи в режимі headless, відсутність готового REST API стає серйозною перешкодою. Ми налаштовуємо Content Delivery API під ключ — від конфігурації до інтеграції з вашим фронтендом, забезпечуючи швидку та надійну видачу контенту. Наша команда бере на себе весь цикл робіт і надає подальшу підтримку, щоб ви могли зосередитися на розвитку продукту.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування Umbraco Content Delivery API: конфігурація та інтеграція
Середній
~3-5 днів
Часті запитання

Налаштування Content Delivery API Umbraco

Проблема: при спробі використовувати Umbraco як headless CMS розробники стикаються з відсутністю вбудованого REST API до версії 12. Content Delivery API вирішує це завдання — він повертає контент у форматі JSON зі швидкістю 50ms (у 2.4 рази швидше за GraphQL). Ми налаштовуємо його під ключ: від конфігурації до інтеграції з React, Next.js або Vue. За 1–2 дні отримуєте готовий headless-бекенд, який віддає опублікований контент через REST API лише для читання. Наш досвід — 5+ років і 15+ проєктів на Umbraco, включаючи великі новинні портали та інтернет-магазини. Економія трудовитрат: інтеграція CDA займає в 3 рази менше часу, ніж розробка власного REST API, а витрати на інфраструктуру знижуються до 30%. Зв'яжіться з нами для консультації — оцінимо ваш проєкт за один день.

Як налаштувати Content Delivery API в Umbraco?

Увімкнення CDA — це зміна одного файлу конфігурації. Потрібно додати блок Umbraco.CMS.DeliveryApi в appsettings.json:

{
  "Umbraco": {
    "CMS": {
      "DeliveryApi": {
        "Enabled": true,
        "PublicAccess": true,
        "ApiKey": "your-api-key-for-preview",
        "DisallowedContentTypeAliases": [],
        "RichTextOutputAsJson": false,
        "Media": {
          "Enabled": true
        }
      }
    }
  }
}

Після ввімкнення стануть доступні базові endpoint'и:

  • GET /umbraco/delivery/api/v2/content — список контенту
  • GET /umbraco/delivery/api/v2/content/item/{id} — за ID
  • GET /umbraco/delivery/api/v2/content/item/{path} — за шляхом
  • GET /umbraco/delivery/api/v2/content?filter=contentType:blogPost — з фільтром
  • GET /umbraco/delivery/api/v2/media — медіафайли

Покрокове налаштування CDA

  1. Увімкніть CDA в конфігурації як показано вище.
  2. Налаштуйте PublicAccess — для зовнішнього доступу встановіть true.
  3. Встановіть ApiKey (обов'язково для Preview API).
  4. Обмежте типи контенту через DisallowedContentTypeAliases (при необхідності).
  5. Перевірте індексацію — виконайте тестовий GET-запит до ендпоінту.
  6. Налаштуйте фільтри для часто використовуваних вибірок.

Гнучка фільтрація контенту

CDA підтримує гнучку фільтрацію. Наприклад: contentType:blogPost,createDate>2023-01-01 поверне пости блогу після зазначеної дати. Фільтр properties.tags:javascript відфільтрує за тегом. Також доступне сортування: sort: 'createDate:desc' або sort: 'properties.sortOrder:asc'. Параметр expand дозволяє підвантажити пов'язані елементи: expand: 'properties[heroImage,author]'. Fields обмежує повернуті поля: fields: 'properties[title,slug]'. Усі параметри комбінуються в рядку запиту.

Тип фільтра Приклад Опис
За типом контенту contentType:blogPost Вибірка певних типів
За датою createDate>2023-01-01 Фільтр за датою створення
За властивостями properties.tags:javascript Фільтр за значенням властивості
За культурою culture=en-US Для багатомовних сайтів

Обсяг робіт з налаштування Headless-рішення

Ми надаємо готовий набір робіт, який покриває повний цикл:

  • Діагностика поточної конфігурації Umbraco
  • Увімкнення та налаштування CDA (включаючи Preview API)
  • Розробка TypeScript-клієнта для фронтенду
  • Інтеграція з обраним фреймворком (Next.js, Vue, React)
  • Налаштування фільтрів, сортування та expand для пов'язаних елементів
  • Створення кастомних селекторів для індексації (якщо потрібно)
  • Документація по всіх endpoint'ах і фільтрах
  • Підтримка протягом місяця після запуску

Типовий TypeScript-клієнт

const UMBRACO_URL = process.env.UMBRACO_URL!;
async function getContent(params: {
  filter?: string;
  sort?: string;
  take?: number;
  skip?: number;
  expand?: string;
  fields?: string;
}) {
  const query = new URLSearchParams();
  if (params.filter) query.set('filter', params.filter);
  if (params.sort) query.set('sort', params.sort);
  if (params.take) query.set('take', String(params.take));
  if (params.skip) query.set('skip', String(params.skip));
  if (params.expand) query.set('expand', params.expand);
  if (params.fields) query.set('fields', params.fields);
  const res = await fetch(
    `${UMBRACO_URL}/umbraco/delivery/api/v2/content?${query}`,
    { next: { revalidate: 3600 } }
  );
  return res.json();
}
// Отримання постів блогу
const { items, total } = await getContent({
  filter: 'contentType:blogPost',
  sort: 'createDate:desc',
  take: 12,
  expand: 'properties[author,categories]',
});

Фільтри комбінуються через кому. Приклади:

  • contentType:blogPost,createDate>2023-01-01
  • contentType:blogPost,properties.tags:javascript
  • Сортування: sort: 'createDate:desc' або sort: 'properties.sortOrder:asc'
  • Expand: expand: 'all' або expand: 'properties[heroImage,author]'
  • Fields: fields: 'properties[title,slug,excerpt,heroImage]'

Як працює Preview API для редакторів?

Для перегляду чернеток використовується Preview API. У заголовки запиту додаються:

  • Api-Key — ключ з конфігурації
  • Preview: true

Це дозволяє редакторам бачити неопубліковані зміни до публікації. Без ключа Preview API недоступний.

Створення кастомних селекторів

Якщо стандартної фільтрації недостатньо, можна розширити API через C#. Наприклад, додати поле publishedDate для сортування:

using Umbraco.Cms.Core.DeliveryApi;

public class PublishedDateSelector : IContentIndexHandler
{
    public IEnumerable<IndexFieldValue> GetFieldValues(IContent content, string? culture)
    {
        yield return new IndexFieldValue
        {
            FieldName = "publishedDate",
            Values = new object[] { content.GetValue<DateTime>("publishedDate") },
        };
    }

    public IEnumerable<IndexField> GetFields()
    {
        yield return new IndexField
        {
            FieldName = "publishedDate",
            FieldType = FieldType.Date,
            VariesByCulture = false,
        };
    }
}

Після реєстрації селектора в DI поле publishedDate стане доступним для сортування та фільтрації через API.

Інтеграція з Next.js (App Router)

// app/blog/page.tsx
export const revalidate = 3600;

export default async function BlogPage() {
  const { items, total } = await getContent({
    filter: 'contentType:blogPost',
    sort: 'createDate:desc',
    take: 12,
    expand: 'properties[heroImage]',
  });

  return <BlogGrid posts={items} total={total} />;
}

Для статичної генерації (SSG) використовуйте generateStaticParams з async запитом до CDA для отримання списку маршрутів.

Порівняння CDA з іншими підходами

Критерій Content Delivery API GraphQL (через Content Service) Кастомний REST
Швидкість (TTFB) ~50ms (індекс Examine) ~120ms (парсинг запиту) ~80ms (прямі запити)
Підтримка Вбудована, оновлюється з CMS Через пакети Umbraco Ручна реалізація
Гнучкість фільтрації Стандартні фільтри + кастомні селектори Повний GraphQL-запит Будь-яка логіка
Простота налаштування Мінімальна (конфіг) Середня (схема, хуки) Висока (написання контролерів)

CDA виграє у швидкості та простоті — ідеально для типових Headless-проєктів. Content Delivery API швидший за GraphQL в 2.4 раза по TTFB (50ms vs 120ms).

Деталі налаштування для багатомовності

Якщо сайт багатомовний, в CDA потрібно враховувати культуру. Для цього в запит додається query-параметр culture (наприклад, ?culture=en-US). За замовчуванням API повертає контент для культури за замовчуванням. Також можна використовувати VariesByCulture в кастомних селекторах.

Типові помилки при налаштуванні CDA

  • Відсутність ApiKey для Preview — без ключа Preview не працює.
  • Неправильний формат фільтра — пробіли або зайві коми призводять до помилки 400.
  • Забули ввімкнути PublicAccess — тоді API доступний лише локально.
  • Не налаштували expand для пов'язаних медіа — замість URL прийдуть лише ID.

Наша команда гарантує, що всі ці нюанси будуть враховані. Замовте консультацію — ми допоможемо налаштувати CDA під ваш проєкт.

Джерело: Документація Umbraco CDA

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060