Настройка Directus REST API / GraphQL API

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

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Directus REST API / GraphQL API
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка Directus REST API / GraphQL API

Directus генерирует полный REST API и GraphQL для всех коллекций автоматически. REST — по умолчанию, GraphQL — включается в настройках. Оба используют одну систему прав доступа.

REST API

Базовые операции:

# Список
GET /items/articles?fields=id,title,slug&filter[status][_eq]=published&sort=-date_published&limit=10

# Один элемент
GET /items/articles/42?fields=*,author.*,category.*

# Создать
POST /items/articles
Authorization: Bearer <token>
{ "title": "New Article", "status": "draft" }

# Обновить
PATCH /items/articles/42
{ "status": "published" }

# Удалить
DELETE /items/articles/42

Фильтры:

# Операторы: _eq, _neq, _lt, _lte, _gt, _gte, _in, _nin, _null, _nnull, _contains, _icontains, _starts_with, _ends_with

# Числовой диапазон
GET /items/products?filter[price][_gte]=100&filter[price][_lte]=500

# OR условие
GET /items/articles?filter[_or][0][title][_icontains]=react&filter[_or][1][content][_icontains]=react

# Связанные коллекции
GET /items/articles?filter[category][slug][_eq]=tech

# Несколько значений
GET /items/orders?filter[status][_in]=paid,shipped

Populate (deep):

# Все поля первого уровня
GET /items/articles?fields=*

# Конкретные поля связей
GET /items/articles?fields=id,title,author.name,author.email,category.name,thumbnail.id,thumbnail.filename_disk

# Вложенные связи
GET /items/articles?fields=id,title,comments.id,comments.text,comments.user.name

# Deep populate
GET /items/articles/1?deep[comments][_sort]=-date_created&deep[comments][_limit]=5

Агрегация:

# Подсчёт, сумма, среднее
GET /items/orders?aggregate[count]=*&aggregate[sum]=total&aggregate[avg]=total&filter[status][_eq]=paid

# Группировка
GET /items/orders?groupBy[]=status&aggregate[count]=*

Системные коллекции

# Пользователи
GET /users?fields=id,first_name,last_name,email,role.name

# Файлы/медиа
GET /files?fields=id,filename_disk,width,height,filesize

# Активность
GET /activity?filter[collection][_eq]=articles&sort=-timestamp&limit=20

GraphQL

# Включить в .env
GRAPHQL_SDLFILE=/tmp/graphql-schema.graphql

GraphQL доступен по /graphql:

query GetArticles($locale: String, $limit: Int) {
  articles(
    filter: { status: { _eq: "published" } }
    sort: ["-date_published"]
    limit: $limit
  ) {
    id
    title
    slug
    excerpt
    date_published
    thumbnail {
      id
      filename_disk
    }
    category {
      name
      slug
    }
    author {
      first_name
      last_name
    }
  }
}

query GetSingletonSettings {
  settings {
    site_name
    site_description
    logo { id filename_disk }
    social_links
  }
}

mutation CreateContact($data: create_contacts_input!) {
  create_contacts_item(data: $data) {
    id
    email
    message
  }
}

Realtime через WebSocket

# Подключение
ws://localhost:8055/websocket

# Аутентификация
{ "type": "auth", "access_token": "..." }

# Подписка на коллекцию
{ "type": "subscribe", "collection": "articles", "uid": "sub-1", "query": { "fields": ["id", "title"] } }

# Событие изменения
{ "type": "subscription", "event": "update", "data": [{ "id": 1, "title": "Updated" }] }

Кастомный запрос через SDK

import { createDirectus, rest, aggregate, readItems } from '@directus/sdk'

const client = createDirectus(DIRECTUS_URL).with(rest())

// Агрегация продаж за месяц
const salesStats = await client.request(
  aggregate('orders', {
    aggregate: { count: '*', sum: ['total'], avg: ['total'] },
    groupBy: ['status'],
    filter: { date_created: { _gte: '$NOW(-30 days)' } },
  })
)

// Search с весами
const results = await client.request(
  readItems('articles', {
    search: 'TypeScript',  // fulltext search по всем строковым полям
    fields: ['id', 'title', 'excerpt'],
    filter: { status: { _eq: 'published' } },
    limit: 10,
  })
)

Rate Limiting и безопасность

# Rate limiting
RATE_LIMITER_ENABLED=true
RATE_LIMITER_STORE=redis
RATE_LIMITER_POINTS=50
RATE_LIMITER_DURATION=1

# Отключить introspection GraphQL в production
GRAPHQL_INTROSPECTION=false

Сроки

Настройка GraphQL, агрегаций, Realtime подписок — 1–2 дня.