Настройка Contentful Space и Content Model
Space в Contentful — изолированное рабочее пространство с собственными content types, записями и окружениями. Правильная структура Content Model определяет масштабируемость проекта.
Создание Space
В app.contentful.com → Add Space. Бесплатный план: 1 space, 25 000 records, 2 locale, 2 пользователя.
Content Model через GUI
Settings → Content Model → Add Content Type:
Blog Post (blogPost)
├── title: Short text (required, unique)
├── slug: Short text (unique, regex: ^[a-z0-9-]+$)
├── excerpt: Short text (max: 500)
├── content: Rich Text
├── heroImage: Media (image)
├── publishedAt: Date & Time
├── author: Reference → Author (1:1)
├── categories: References → Category (many)
└── seoTitle: Short text (max: 60, field-level locale)
Content Model через CLI
npm install -g contentful-cli
contentful login
contentful space export --space-id YOUR_SPACE_ID --export-dir ./backup
# Импортировать модель в новый space
contentful space import --space-id NEW_SPACE_ID --content-file ./backup/export.json
Environments
Production и staging окружения в одном space:
master (production) ← CDA_TOKEN_PRODUCTION
staging ← CDA_TOKEN_STAGING
# Создать окружение staging
contentful space environment create --name staging --environment-id staging
# Клонировать модель из master
contentful space environment create --name staging \
--environment-id staging --source master
В SDK:
// Для staging
createClient({
space: SPACE_ID,
accessToken: STAGING_TOKEN,
environment: 'staging',
})
API Tokens
Settings → API Keys → Add API Key:
- Content Delivery API (CDA) — публичный, для фронтенда
- Preview API — для черновиков и Draft Mode
- Content Management API (CMA) — серверный, никогда не в браузер
Локализация
Settings → Locales → Add Locale. Все поля по умолчанию переводимые. Можно отключить для конкретного поля.
// Запрос с локалью
const entries = await client.getEntries({
content_type: 'blogPost',
locale: 'ru',
})
// Все локали сразу
const entry = await client.getEntry(id, { locale: '*' })
// entry.fields.title = { 'ru': '...', 'en': '...', 'uk': '...' }
Content Model через Contentful CLI + JSON
# Экспорт модели
contentful space export --space-id xxx --skip-content --export-dir ./model
# Файл model/contentful-export-xxx.json содержит contentTypes[]
# Редактировать и импортировать в другой space
contentful space import --space-id yyy --content-file ./model/contentful-export-xxx.json
Это позволяет версионировать модель в git и деплоить через CI.
TypeScript типы через codegen
npm install -D cf-content-types-generator
npx cf-content-types-generator \
--spaceId YOUR_SPACE_ID \
--token YOUR_CMA_TOKEN \
--out ./src/types/contentful.d.ts
Генерирует TypeScript-интерфейсы для всех Content Types — полная типизация API-ответов.
Сроки
Настройка Space с 4–6 Content Types, локалями, окружениями и API-токенами — 1 день.







