Интеграция Baserow с Appsmith - настройка через REST API
Appsmith собирает внутренние панели, дашборды и CRUD-приложения, а открытая редакция Baserow служит для них реляционным хранилищем данных - связка строится на одном защищённом Datasource в Appsmith и Database-токене Baserow, а ниже описаны настройка источника данных, паттерны чтения и записи строк и двухшаговая загрузка файлов.
Обзор
Центральный элемент интеграции - Datasource (источник данных) в Appsmith: все запросы на чтение, создание, изменение и удаление строк проходят через одно и то же защищённое подключение, поэтому токен Baserow нигде не дублируется вручную внутри отдельных запросов приложения.
Требования
- Baserow: Database-токен
с правами
Create,Read,UpdateиDelete. - Appsmith: учётная запись - облачная или self-hosted.
Шаг 1. Настройка универсального Datasource
Не прописывайте токен API в каждом запросе отдельно - используйте функцию Appsmith Authenticated Datasource (аутентифицированный источник данных), чтобы хранить токен на сервере и переиспользовать его во всём приложении.
- В Appsmith откройте Datasources → New Datasource → Authenticated API.
- Name:
Baserow API. - URL:
https://api.baserow.io(или адрес self-hosted инстанса). - Authentication:
- Type: API Key.
- Key:
Authorization - Value:
Token [ВАШ_DATABASE_ТОКЕН](между словом «Token» и токеном должен быть пробел). - Add To: Header.
- Нажмите Save.
Шаг 2. Паттерн чтения (GET)
Чтобы заполнить виджет Table или List данными из Baserow:
- Создайте новый запрос на базе Datasource
Baserow API. - Method:
GET - Path:
/api/database/rows/table/[TABLE_ID]/ - Parameters:
- Key:
user_field_names| Value:true(обязательно - иначе поля вернутся какfield_123, а не по названию).
- Key:
- Bind to Widget: в свойстве Table Data виджета Table укажите
{{ get_rows.data.results }}.
Шаг 3. Паттерн записи (POST/PATCH)
Baserow использует POST для создания строк и PATCH для их изменения.
Создание строки (POST)
- Path:
/api/database/rows/table/[TABLE_ID]/ - Parameter:
user_field_names=true - Body (JSON):
{
"Name": "{{ InputName.text }}",
"Status": "{{ SelectStatus.selectedOptionValue }}",
"Active": {{ CheckboxActive.isChecked }}
}Изменение строки (PATCH)
Запрос нацелен на конкретный идентификатор строки.
- Path:
/api/database/rows/table/[TABLE_ID]/{{ Table1.triggeredRow.id }}/ - Body (JSON): включайте только те поля, которые нужно изменить.
{
"Status": "Archived"
}Шаг 4. Двухшаговая загрузка файлов
Baserow работает с файлами иначе, чем большинство простых API: файл нельзя отправить напрямую в строку. Сначала файл (1) загружается на сервер, затем результат (2) привязывается к строке.
Действие А. Загрузка бинарных данных (вспомогательный запрос)
Создайте запрос с именем upload_file.
- Method:
POST - Path:
/api/user-files/upload-file/ - Headers:
Content-Type:multipart/form-data - Body: Form Data
- Key:
file| Type:File| Value:{{ FilePicker1.files[0] }}
- Key:
Ответ: Baserow возвращает хеш name (например, "abcd-1234-image.png").
Действие Б. Привязка к строке (основной запрос)
Создайте запрос с именем link_file_to_row.
- Method:
PATCH - Path:
/api/database/rows/table/[TABLE_ID]/{{ Table1.selectedRow.id }}/ - Body (JSON):
{
"Documents": [
{
"name": "{{ upload_file.data.name }}"
}
]
}Логика workflow
В виджете FilePicker назначьте событию onFilesSelected запуск JS-объекта:
export default {
async handleUpload() {
// 1. Загружаем файл в хранилище Baserow
await upload_file.run();
// 2. Привязываем полученный хеш файла к нужной строке
await link_file_to_row.run();
// 3. Обновляем таблицу, чтобы показать новый файл
await get_rows.run();
}
}Рекомендации
- Пагинация. Включите Server Side Pagination в виджете Table Appsmith и передавайте
&page={{Table1.pageNo}}в GET-запрос к Baserow - это позволяет эффективно работать с большими таблицами. - Поля с одним выбором. Если в таблице Baserow есть поле с одним выбором , при создании строки через API нужно передавать точное текстовое значение варианта (с учётом регистра) либо числовой идентификатор опции.
Часто задаваемые вопросы
Нужен ли отдельный сервис автоматизации между Appsmith и Baserow? Нет - оба паттерна, чтение и запись, реализуются напрямую через REST API базы данных Baserow и один Datasource в Appsmith; промежуточный сервис можно добавить, но обязательным он не является.
Что произойдёт, если отправить файл вместе с остальными полями строки в одном запросе? Ничего не сохранится - Baserow принимает файлы только через отдельный эндпоинт загрузки, поэтому запрос на создание или изменение строки всегда идёт после того, как файл уже загружен и получен его хеш.
Как быть с очень большими таблицами Baserow в списке или таблице Appsmith? Используйте параметр page GET-запроса вместе с серверной пагинацией виджета - так Appsmith будет запрашивать данные постранично вместо однократной загрузки всех строк.
Смежные темы - настройка Database-токенов для ограничения доступа сторонних приложений и обзор REST API Baserow с полным списком эндпоинтов для чтения, записи и удаления строк.