Интеграция 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 (аутентифицированный источник данных), чтобы хранить токен на сервере и переиспользовать его во всём приложении.

  1. В Appsmith откройте DatasourcesNew DatasourceAuthenticated API.
  2. Name: Baserow API.
  3. URL: https://api.baserow.io (или адрес self-hosted инстанса).
  4. Authentication:
    • Type: API Key.
    • Key: Authorization
    • Value: Token [ВАШ_DATABASE_ТОКЕН] (между словом «Token» и токеном должен быть пробел).
    • Add To: Header.
  5. Нажмите Save.

Шаг 2. Паттерн чтения (GET)

Чтобы заполнить виджет Table или List данными из Baserow:

  1. Создайте новый запрос на базе Datasource Baserow API.
  2. Method: GET
  3. Path: /api/database/rows/table/[TABLE_ID]/
  4. Parameters:
    • Key: user_field_names | Value: true (обязательно - иначе поля вернутся как field_123, а не по названию).
  5. 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] }}

Ответ: 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 с полным списком эндпоинтов для чтения, записи и удаления строк.

Проверено OpenNix LLC · Обновлено