HTTP-запросы
GET, POST, PATCH, DELETE — что делает каждый.
Лучшие практики
NocoDB URL
Храните URL NocoDB в глобальной переменной на случай, если вы поменяете адрес вашего сервера.
Где взять URL?
→ Откройте Swagger.
→ Откройте любой первый GET-запрос.
→ Нажмите “Try it out”.
→ Нажмите “Execute”.
→ Скопируйте блоки “Выполнить SmartQuery” и “Отправить HTTP-запрос” с обработкой ошибки.
URL будет находиться чуть ниже “Execute” в поле “Request URL”.



Скопируйте все до …tables/.

Создайте глобальную переменную и вставьте туда этот адрес.

Идентификаторы таблиц
Храните идентификаторы таблиц в глобальной переменной типа словарь на случай, если добавятся/изменятся/удалятся таблицы в NocoDB.
Где взять идентификаторы таблиц?
Откройте Swagger.
Каждая ваша таблица содержит одну группу запросов.

Идентификаторы таблиц видны сразу же.

Чтобы скопировать идентификатор, выполните любой тестовый запрос.
Из поля “Request URL” вы можете выделить и скопировать идентификатор.

Создайте глобальную переменную с типом словарь, где ключ — название таблицы, значение — идентификатор.
{
"Features":"m6uv6qopcq4layy",
"Fake":"mw4871qe2a2r8j7"
}

Токен NocoDB
Храните токен NocoDB в глобальной переменной.

Заготовка из блоков
Используйте специальную заготовку из блоков “Выполнить SmartQuery” и “Отправить HTTP-запрос”, а также блоков с обработкой ошибок.
%get_url_arr% = []
# Метод запроса - True = GET, False = POST,PATCH,DELETE
%is_get% = True
# Таблица
%table% = ""
# Нужные поля в ответе
%fields% = ""
# Указать поля для сортировки и порядок
%sort% = ""
# Фильтры
%where% = ""
# Сколько нужно записей в ответе
%limit% = ""
# Перемешивание
# shuffle встречается в разных инструментах, поэтому shuffl
%shuffl% = ""
# С какой записи начать
%offset% = ""
# Если нужна одна запись
%record_id% = ""
%get_url_arr%.push("fields=" + %fields% if %fields% else %fields%)
%get_url_arr%.push("sort=" + %sort% if %sort% else %sort%)
%get_url_arr%.push("where=" + %where% if %where% else %where%)
%get_url_arr%.push("limit=" + %limit% if %limit% else %limit%)
%get_url_arr%.push("shuffle=" + %shuffl% if %shuffl% else %shuffl%)
%url% = (
%NOCODB_URL%
+ %NOCODB_TABLE%[%table%]
+ "/records"
+ (
("/" + %record_id% if %record_id% else "?" + (%get_url_arr% | join("&")))
if %is_get% else ""
)
)
%req_body% = {}

В блоке “Отправить HTTP-запрос” в поле URL введите %url%.
В заголовках укажите:
accept = application/json
xc-token = %NOCODB_TOKEN%
content-type = application/json

Ответ сохраняйте в переменную с типом “Словарь”.
Статус ответа сохраняйте в переменную типа “Число”.
Заголовки ответа можно не сохранять.
Если GET-запрос — пустое тело запроса “Форма”.

Если POST/PATCH/DELETE — тело запроса “Текст”:
{{ %req_body% | to_json }}

Если вы хотите всегда быть в курсе обо всех происшествиях с запросами, то:
→ Создайте блок “Webhook”.

→ Создайте блоки “Выполнить SmartQuery” и “Выполнить HTTP-запрос”.
→ Добавьте следующий код в блок “Выполнить SmartQuery”:
%alert% = {
"message": "Ошибка при формировании запроса",
"block": ""
}
%req_body% = {
"access_token":"ppFHtisTOfZTuLFIZ2atx3hM00vfI1q5RI0M3L_aGKCo6kQaPOq_3wjK-NBjpfqa",
"v":"0.0.1",
"channel_id":"7832339438",
"block_id":"36b0f86002df181e13dc619f",
"peer_id":"<вставьте id пользователя или его username>",
"data": %alert%
}

→ Скопируйте URL вебхука.
→ Вставьте его в URL в блоке “Отправить HTTP-запрос”.
→ Поменяйте метод на POST.
→ Тело запроса выберите “Текст”:
{{ %req_body% | to_json }}

→ В заголовках передайте:
content-type = application/json

Сохранять ответ, статус и заголовки необязательно.
→ Переместите блоки к заготовке
→ Проведите стрелку от выхода по ошибке блока “Выполнить SmartQuery” заготовки.

→ Откройте блок ”Выполнить SmartQuery”, от которого выходит стрелка по ошибке.

→ Нажмите на адресную строку вашего браузера и скопируйте URL целиком.

→ Откройте блок “SmartQuery”, на который ведет стрелка по ошибке
→ В ключ “block” словаря %alert% вставьте скопированный URL
→ Замените значение “peerid” словаря %reqbody% на ваш id (или id админа)


→ Проведите стрелку от ошибки блока “Отправить HTTP-запрос”.

→ Создайте блок “Условие” с условием:
%Статус% == 200
→ Проведите к нему стрелку от блока “Отправить HTTP-запрос”.

→ Сделайте дубликат из двух блоков “Выполнить SmartQuery” и “Отправить HTTP-запрос”, которые идут от стрелок с ошибками.

→ В блоке “Выполнить SmartQuery” замените “message” в %alert% на:
"Ошибка при запросе"
→ Здесь же, добавьте ниже строчку:
"code": %Статус%,

→ Вставьте блоки рядом с “Иначе” и соедините:

→ Создайте блок “Отправить сообщение” и соедините с блоком “Webhook”.
→ Введите следующий текст сообщения:
Произошла ошибка!
%public_api_data%['message']
{{ '' if 'code' not in %public_api_data% else "\nКод ошибки: " + %public_api_data%['code'] }}
%public_api_data%['block']

Такую заготовку можно смело копировать, и настраивать под конкретные нужды.

При копировании блоков их URL меняется.
Поэтому, в скопированных блоках нужно внести некоторые небольшие изменения, чтобы ошибка указывала на действительный блок.
Нужно снова выбрать блок, на который будет ссылаться ошибка, скопировать адрес из адресной строки и заменить “block” в %alert% в обоих цепочках с ошибками.

Цепочка с вебхуком должна быть одна на весь проект. Можете поместить ее в отдельный сценарий.

Преимущества
Плюсы от внедрения в проект лучших практик:
— Если у вас поменяется токен, не придется менять его во всех блоках, достаточно будет изменить глобальную переменную.
— Если у вас добавится/удалится таблица, достаточно будет добавить/удалить ее идентификатор в глобальной переменной.
— Если вы поменяете URL NocoDB (смените сервер или облако), достаточно поменять URL в одном месте.
— Минимум затрат времени на настройку очередного запроса к NocoDB.
— Вы сможете быстро реагировать на сбои и неполадки при работе бота, связанные с запросами в NocoDB.