Sanity — облачная headless CMS, разработанная норвежской компанией Sanity.io (основана 2017). В отличие от традиционных CMS (WordPress, MODX), Sanity не генерирует HTML — она предоставляет только API для доступа к структурированному контенту. Frontend строится отдельно на любой технологии.
Архитектура
Sanity состоит из трёх частей:
- Content Lake — облачное хранилище контента на серверах Sanity.
- Sanity Studio — настраиваемый редактор контента (React-приложение, деплоится самостоятельно или на Sanity CDN).
- APIs — GROQ (Graph-Relational Object Queries, собственный язык запросов Sanity), GraphQL, REST.
GROQ vs GraphQL
GROQ — проприетарный язык запросов Sanity, оптимизированный для вложенных JSON-структур. Пример: *[_type == "post" && published == true] | order(date desc)[0..10] {title, slug, body}. GraphQL — стандартный язык запросов, доступен как альтернатива через отдельный endpoint.
История
Sanity основана в 2017 году Эвеном Веструмом и командой норвежского агентства Bengler. Конкурирует с Contentful, Prismic, Strapi. В 2021 году Sanity привлёк $39 миллионов Series B. GROQ открыт как open source в 2019 году. Бесплатный тариф включает 10 ГБ хранилища и 200 000 API-запросов/месяц.
Связь с хостингом
Sanity не требует хостинга для хранения контента — он в облаке Sanity. Хостинг нужен для Sanity Studio (деплоится на любую статическую платформу) и для frontend-приложения (Next.js, Astro). Такая архитектура позволяет масштабировать frontend отдельно от CMS. Для корпоративных проектов доступен Self-Hosted вариант (@sanity/cli).
Sanity как headless CMS
Sanity -- headless CMS (Content Management System без frontend) с хранилищем в облаке Sanity. Контент редактируется через Sanity Studio (React-приложение), доступен через GROQ API или GraphQL. GROQ (Graph-Relational Object Queries) -- собственный язык запросов Sanity, мощнее REST, гибче GraphQL. Sanity хранит данные в облаке Sanity (CDN-реплицированное хранилище), поэтому отдельный хостинг для данных не нужен -- платите только за API-запросы сверх лимита. Тариф Free: 10 000 API-запросов/мес, 1 проект. Team: $15/мес, Pro: $99/мес.
Sanity и JAMstack
Sanity популярен в JAMstack-архитектурах: статический frontend (Gatsby, Next.js, Astro) + Sanity как API для контента. При генерации сайта фронтенд-фреймворк запрашивает данные из Sanity API и создаёт статические HTML-файлы. Webhooks Sanity уведомляют систему деплоя при изменении контента -- сайт автоматически перегенерируется. Конкуренты: Strapi (self-hosted, open-source), Contentful (SaaS, дороже), Directus (self-hosted), Prismic. Sanity Studio можно кастомизировать через React-плагины.
История Sanity
Sanity основан в 2017 году командой из Осло (Норвегия) во главе с Even Westvang. Первые версии в 2017 году, публичный запуск в 2018. Sanity v3 (2022) полностью переписал Studio на React 18 и TypeScript. Инвестиции: $9.3M (Series A, 2020), $39M (Series B, 2021). Используется компаниями Nike, Cloudflare, Figma.
Типичные ошибки при работе с Sanity
Первая ошибка -- хранить секретные данные в Sanity: это публичный API, данные доступны всем. Для конфиденциального контента нужно настроить Sanity Access Control List. Вторая -- не настроить CORS для Sanity Studio: Studio не запустится без разрешённого origin. Третья -- игнорировать GROQ-запросы в пользу GraphQL: GROQ более гибок и производительен для Sanity. Вебхуки Sanity рекомендуется защищать секретным токеном для верификации источника. Для больших объёмов контента используйте Content Lake (Sanity объектное хранилище) с пагинацией через offset...limit в GROQ.
Sanity интегрируется с фреймворками Next.js, Astro, Gatsby через официальные пакеты. Данные из Sanity CDN кешируются на Cloudflare. Для хостинга фронтенда Sanity-проектов подходят Vercel, Netlify или VPS с Nginx.