Налаштування 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
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування REST API / GraphQL API Directus

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)' } },
  })
)

// Пошук з вагами
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 дні.