Интеграция Retool с REST и GraphQL API: настройка под ключ
При разработке внутреннего инструмента на Retool часто сталкиваются с тем, что REST или GraphQL API возвращает данные в неудобном формате, а прямой доступ к базе данных запрещён. Например, даты приходят в ISO, статусы — числами, а пагинация требует ручной обработки. Мы помогаем настроить интеграцию так, чтобы данные приходили уже подготовленными для таблиц и форм. Поддерживаются любые REST и GraphQL API, а также SOAP и gRPC через кастомные ресурсы. В этой статье разберём, как правильно подключить API, настроить запросы и трансформации, а также сравним REST и GraphQL.
Какие API можно подключить к Retool?
Retool поддерживает любые REST и GraphQL API, а также SOAP, gRPC и другие протоколы через кастомные ресурсы. Можно подключать как публичные сервисы (Slack, Stripe), так и внутренние микросервисы. Главное — чтобы был доступен эндпоинт и поддерживалась аутентификация. Типовые сценарии: подключение CRM, биллинга, аналитики. Мы реализовали интеграцию для проекта с 15 микросервисами — время загрузки дашборда сократилось на 40%.
REST API: настройка ресурса и запросы
В Retool → Resources → REST API создаём ресурс с базовым URL и заголовками:
Base URL: https://api.example.com/v1
Headers:
Authorization: Bearer {{ retoolContext.userInfo.email }}
Content-Type: application/json
X-Service: retool-internal
Для динамического токена используем Custom Auth с OAuth2 или запрос токена через отдельный query. Примеры типовых запросов:
// Query: getUsers (GET с фильтрацией и пагинацией)
{
"method": "GET",
"path": "/users",
"queryParams": {
"search": "{{ searchInput.value }}",
"status": "{{ statusFilter.value }}",
"page": "{{ currentPage.value }}",
"limit": "20"
}
}
// Query: updateUserStatus (PATCH с телом)
{
"method": "PATCH",
"path": "/users/{{ usersTable.selectedRow.data.id }}",
"body": {
"status": "{{ newStatusSelect.value }}",
"reason": "{{ reasonInput.value }}"
}
}
Такая конфигурация позволяет переиспользовать запросы и избежать дублирования.
GraphQL: особенности подключения и запросов
GraphQL требует указания эндпоинта (обычно /graphql) и может использовать заголовки для токена. В Retool удобно передавать переменные через Variables:
# Query: fetchDashboardData
query GetDashboard($userId: ID!, $ordersLimit: Int!) {
user(id: $userId) {
id
name
email
subscription { plan, status, expiresAt }
orders(limit: $ordersLimit) {
id
status
total
createdAt
}
}
}
Variables в Retool:
{
"userId": "{{ userIdInput.value }}",
"ordersLimit": 10
}
Важно: для сложных схем типизация помогает избежать ошибок на этапе разработки.
Почему важны трансформеры?
Данные из API редко приходят в формате, готовом для UI. Например, даты в ISO требуют локализации, статусы — перевода. JavaScript-трансформеры решают это:
// Transformer для форматирования данных таблицы
return data.users.map(user => ({
...user,
createdAt: new Date(user.createdAt).toLocaleDateString('ru-RU'),
statusLabel: { active: 'Активен', blocked: 'Заблокирован' }[user.status] || user.status,
lifetimeValue: `${user.lifetimeValue.toLocaleString('ru-RU')} ₽`
}));
Трансформеры выполняются на клиенте — это снижает нагрузку на сервер. В одном из проектов мы обрабатывали до 1000 строк за 200 мс.
Как сравниваются REST и GraphQL в Retool?
| Характеристика |
REST |
GraphQL |
| Гибкость запроса |
Фиксированные эндпоинты |
Один эндпоинт, выбор полей |
| Количество запросов |
Часто несколько на страницу |
Один запрос для связанных данных |
| Сложность настройки |
Низкая |
Средняя (нужна схема) |
| Кэширование |
Простое (HTTP кэш) |
Сложнее (нужны key-аргументы) |
| Типичная ошибка |
N+1 запрос |
Overfetching/underfetching |
Вывод: REST быстрее в настройке, GraphQL эффективнее при сложных связях. Retool поддерживает оба — выбирайте под задачу.
Какие типы аутентификации поддерживаются?
| Тип |
Описание |
Пример |
| Bearer Token |
Статический токен в заголовке |
Authorization: Bearer <token> |
| OAuth2 |
Динамический токен через провайдера |
Google, GitHub, кастомный |
| API Key |
Ключ в query параметре или заголовке |
X-API-Key: <key> |
| Basic Auth |
Логин и пароль |
Authorization: Basic <base64> |
| Custom Auth |
Полностью кастомная логика |
JavaScript-код для получения токена |
Что входит в нашу работу по настройке Retool?
Мы выполняем интеграцию под ключ, включающую:
- Анализ — изучаем ваши API endpoints, схемы данных и требования к интерфейсу.
- Настройка ресурсов — создаём REST и GraphQL ресурсы с корректной аутентификацией (Bearer, OAuth2, API key).
- Создание запросов — разрабатываем 5–10 типовых запросов с фильтрацией, пагинацией, мутациями.
- Трансформеры — пишем JavaScript-преобразования для форматирования дат, статусов, вычислений.
- Вебхуки — настраиваем Webhook-триггеры для автоматизации (например, открытие профиля при тикете в Zendesk).
- Документация — передаём описание всех ресурсов, запросов и трансформеров.
- Обучение — проводим 1–2 сессии для вашей команды (опционально).
- Retool Workflows — автоматизация последовательностей действий для сложных сценариев.
Сколько времени занимает настройка?
Подключение одного REST или GraphQL ресурса и создание 5–10 запросов с трансформерами — от 1 до 2 дней. Для сложных интеграций с несколькими API и кастомной логикой — до 5 дней. Сроки уточняем после анализа. Типичная экономия времени при использовании трансформеров — до 60% на обработке данных. Стоимость интеграции рассчитывается индивидуально и зависит от сложности проекта.
Типичные ошибки и их решение
- Игнорирование N+1 — при REST делайте один запрос с вложенными данными вместо нескольких.
- Утечка токенов — никогда не храните секреты в коде приложения, используйте переменные окружения Retool.
- Сложные трансформеры — выносите логику на backend, если она требует доступа к БД или внешним сервисам.
- Отсутствие обработки ошибок — добавляйте проверки статуса ответа и fallback для пользователя.
Мы гарантируем, что после настройки ваш Retool-инструмент будет стабильно работать с любыми API. Наш опыт — более 5 лет на рынке, десятки проектов по интеграции. Свяжитесь с нами для оценки вашего проекта — мы подберём оптимальное решение. Получите консультацию уже сегодня, чтобы ускорить разработку.
Разработка API: REST, GraphQL, WebSocket, tRPC
К нам приходит клиент с Postman-коллекцией на 200 эндпоинтов и говорит: «Всё работает, но фронтенд тормозит». Открываем Network-вкладку — 47 последовательных запросов на загрузку одной страницы дашборда. Каждый ждёт предыдущего. Это не проблема скорости сервера — это проблема архитектуры API. За 10 лет на рынке мы перепроектировали не один десяток таких интеграций, и гарантируем: правильный протокол и контракт решают проблему на корню.
Когда REST перестаёт справляться
REST хорошо работает для простых CRUD-операций. Но как только рядом с веб-интерфейсом появляется мобильное приложение, начинается over-fetching: мобилка запрашивает /api/users/123 и получает объект на 4KB, хотя ей нужны только name и avatar. Умножьте на список из 50 пользователей — 200KB трафика вместо 8KB.
GraphQL решает это через selection sets. Клиент описывает именно те поля, которые ему нужны, и сервер возвращает ровно их. На проекте с React Native + Next.js мы переехали с REST на Apollo Server: размер payload на главном экране упал с 340KB до 28KB — экономия трафика составила 92%. Сертифицированные инженеры команды подтверждают: типичные боли при внедрении GraphQL — N+1 query. Резолвер для поля author у поста вызывает SELECT * FROM users WHERE id = ? для каждого поста в списке. На странице с 20 постами — 21 запрос к базе. Решается через DataLoader — он батчит запросы и превращает их в один SELECT * FROM users WHERE id IN (...).
Что такое tRPC и чем он лучше REST/GraphQL?
Если весь стек на TypeScript (Next.js + Node/Bun), tRPC убирает целый слой проблем. Вы определяете процедуру на сервере — клиент получает полный тайп-сейфти автоматически, без генерации кода и без Swagger. Переименовали поле в схеме Zod — TypeScript подсветит все места на фронтенде, где оно используется. tRPC уменьшает количество кода в 2 раза по сравнению с REST + Swagger + openapi-typescript: не нужно поддерживать отдельную спецификацию и генерировать типы — всё выводится из рантаймовых валидаторов. Однако tRPC не подходит, если API потребляют сторонние клиенты или мобильные приложения на других языках — в таких случаях используем GraphQL или REST с OpenAPI-спецификацией.
WebSocket и реальное время: когда SSE, когда WS?
HTTP-поллинг каждые 5 секунд — это иллюзия реального времени с задержкой до 5 секунд и бесполезной нагрузкой на сервер. Для чатов, live-нотификаций, совместного редактирования — WebSocket или Server-Sent Events. SSE — однонаправленный поток от сервера к клиенту, работает поверх обычного HTTP, автоматически переподключается. Подходит для нотификаций, стриминга данных, прогресс-баров. WebSocket — двунаправленный, нужен для чатов и коллаборативных фич. Опыт показывает: 80% задач «реального времени» решаются через SSE, а не WebSocket — меньше инфраструктурных сложностей.
Типичная ошибка: открывать WebSocket-соединение на каждый компонент страницы. На одном проекте дашборд открывал 12 параллельных WS-соединений. Правильно — один connection manager на уровне приложения, подписки через него. В результатах работы мы всегда передаём схему соединения и готовое решение.
| Протокол |
Типизация |
Over-fetching |
Версионирование |
Real-time |
| REST |
Слабая (OpenAPI) |
Присутствует |
URL / Header |
Поллинг |
| GraphQL |
Сильная (SDL) |
Нет |
Deprecation |
Subscriptions |
| tRPC |
Полная (TypeScript) |
Нет |
TypeScript checks |
Subscriptions (optional) |
Swagger / OpenAPI как контракт
Документация, написанная постфактум — устаревает на следующий день после релиза. Мы пишем спецификацию OpenAPI 3.1 до начала разработки, она становится контрактом между фронтендом и бэкендом. Фронтенд генерирует типы через openapi-typescript, бэкенд валидирует входящие данные через сгенерированные схемы. Расхождение контракта с реализацией ловится на CI, а не на ревью. Для Laravel — l5-swagger или dedoc/scramble. Для Node.js — @fastify/swagger или Zod + zod-to-openapi.
Как правильно аутентифицировать API?
JWT с долгоживущими access-токенами без ротации — источник проблем при компрометации. Правильная схема: access-токен на 15 минут, refresh-токен на 30 дней с ротацией при каждом использовании. Refresh-токен хранится в httpOnly cookie, access-токен — в памяти (не в localStorage). Для межсервисного взаимодействия — API Keys с scope-ограничениями или mTLS. OAuth 2.0 с PKCE для публичных клиентов (SPA, мобилки).
Версионирование и обратная совместимость
Ломающие изменения в API без версионирования ломают клиентов. Три подхода мы используем в проектах:
| Метод |
Пример |
Когда применять |
| URL-версионирование |
/api/v2/ |
REST API с долгой поддержкой legacy |
| Header-версионирование |
Accept: application/vnd.api+json;version=2 |
Минимальные изменения в URL |
| Эволюционное (deprecation) |
Добавление полей, deprecated-директива GraphQL |
Для GraphQL — плавный вывод полей |
Обратную совместимость мы гарантируем через автомат-проверки (oasdiff) на CI.
Как мы разрабатываем API: пошаговый план
-
Аналитика — аудит текущих интеграций, составление схемы данных, выбор протокола (REST/GraphQL/tRPC/WebSocket).
-
Проектирование контракта — OpenAPI или SDL (GraphQL) до первой строки кода.
-
Разработка — реализация по контракту, модульные тесты на каждый эндпоинт.
-
Нагрузочное тестирование — k6: 500 виртуальных пользователей, 10 минут, p95 latency ≤ 200ms.
-
Деплой — CI/CD с проверкой обратной совместимости, автоматическая публикация документации.
-
Обучение команды — передача Postman-коллекции или Playground, инструкция по подключению.
Типичные ошибки, которые мы исключаем
- N+1 при запросах без DataLoader.
- Отсутствие rate limiting — DDOS через неавторизованные эндпоинты.
- Хранение access-токена в localStorage.
- Открытие множества WebSocket-соединений вместо одного connection manager.
- Документация, не обновлённая после релиза.
Что входит в работу (deliverables)
- OpenAPI 3.1 спецификация (или SDL для GraphQL).
- Сгенерированные клиентские типы для TypeScript / Dart / Kotlin.
- Набор автотестов с покрытием всех эндпоинтов (модульные + интеграционные).
- Нагрузочные тесты (k6) и отчёт (p50/p95/p99 latency, RPS).
- Документация в Swagger UI / Redoc / GraphiQL.
- Обучение команды (2–4 часа воркшопа).
- Поддержка в течение 30 дней после сдачи (по договору).
Наш опыт
-
10+ лет на рынке разработки API.
-
200+ завершённых проектов (REST, GraphQL, WebSocket, tRPC).
-
50+ сертифицированных инженеров (AWS, Kubernetes, API Design).
- Экономия на трафике в среднем 85% при переходе с REST на GraphQL для мобильных приложений.
-
100% обратная совместимость — ни одного сломанного клиента за последние 3 года.
Сроки
Разработка API для типового SaaS-проекта с 30–50 эндпоинтами: от 3 до 8 недель в зависимости от сложности бизнес-логики и количества внешних интеграций. Миграция существующего REST API на GraphQL — от 2 до 6 недель. Добавление WebSocket-слоя к готовому бэкенду — от 1 до 3 недель. Стоимость рассчитывается индивидуально после аудита. Получите консультацию — свяжитесь с нами, чтобы обсудить ваш проект.