Обзор Trino OpenAPI connector
Trino OpenAPI-коннектор позволяет взаимодействовать с REST API, отвечающим стандартам OpenAPI. OpenAPI — это стандарт описания функционала REST API, с помощью которого указываются доступные эндпойнты, поддерживаемые HTTP-методы, типы ответов, параметры запросов и так далее. Коннектор анализирует OpenAPI-cхему (JSON/YAML) и представляет REST-эндпойнты сервера в виде отдельных таблиц. Затем коннектор преобразует запросы SQL в HTTP-запросы, обрабатывает ответы и возвращает результаты пользователю Trino.
| ПРИМЕЧАНИЕНастоятельно рекомендуется использовать коннектор только для чтения.
Операции вставки и обновления реализованы в экспериментальном режиме. | 
Trino OpenAPI-коннектор поставляется с ADH и готов к использованию "из коробки". Чтобы приступить к работе с коннектором, смотрите статью Пример использования OpenAPI connector. Подробности настройки коннектора описаны в статье Настройка OpenAPI connector.
Анализ схемы OpenAPI
Анализируя схему OpenAPI, коннектор создает SQL-сущности (таблицы, столбцы, запросы) по следующим правилам:
- 
REST-эндпойнты представляются в виде отдельных таблиц. Например, эндпойнт [BaseURL]/transactions представлен для Trino-клиента в виде таблицы transactions. РегистрfooBarпреобразуется вfoo_bar, а специальные символы, такие как/, преобразуются в_.
- 
Операции SQL преобразуются в HTTP-запросы следующим образом: - 
SELECT⇒GETилиPOST(еслиGETнедоступен);
- 
INSERT⇒POST/PUT;
- 
UPDATE⇒PATCH/POST;
- 
DELETE⇒DELETE.
 
- 
- 
Параметры запросов преобразуются в столбцы, включая параметры в пути (path), query-параметры и заголовки. 
- 
Поля в ответах HTTP OK (200)преобразуются в столбцы таблиц.
- 
Сгенерированные столбцы уникальны: - 
Если ответ сервера содержит поля с одинаковыми именами, но разными типами данных, такому полю добавляется постфикс _2,_3и так далее.
- 
Если в запросе к серверу присутствует поле, у которого есть такое же наименование в ответе, к имени поля из тела запроса добавляется постфикс _req.
 
- 
Расширения OpenAPI
OpenAPI поддерживает пользовательские расширения, которые указываются в схеме с помощью блоков с префиксом x-.
Расширения OpenAPI могут использоваться для тонкой настройки или для реализации дополнительных возможностей коннектора (например, x-unwrap,  x-pagination).
| РЕКОМЕНДАЦИЯЕсли схема OpenAPI, возвращаемая REST-сервером, не может быть изменена для включения расширений x-, можно сохранить файл схемы локально и изменить его при необходимости. | 
Сообщения об ошибках
Когда коннектор обращается к API и получает ошибку, клиенту Trino возвращается ошибка SQL. Обычно такие ошибки содержат только код HTTP-ответа, а сообщение ошибки не отображается (сообщение может быть нечитаемым или содержать конфиденциальные данные).
Для отображения информативных сообщений об ошибках, используйте свойство errorPath в блоке x-trino OpenAPI-схемы.
Например:
paths:
  /records:
    get:
      responses:
        # ...
      x-trino:
       errorPath: "$response.body#/message"Дополнительные возможности и ограничения
Реализация коннектора, поставляемая с ADH, включает некоторые улучшения и дополнительные возможности, а именно:
- 
Распаковка массивов. При анализе HTTP-ответа коннектор может автоматически "распаковать" содержимое полей с массивами. 
- 
Пагинация (pagination) для сдвига LIMIT. Позволяет получать от REST API разбитые на страницы (page) ответы.
Ограничения
Коннектор имеет следующие ограничения:
- 
Ограниченная поддержка операций INSERT/DELETE/UPDATE. Коннектор рекомендуется использовать только для операций чтения.
- 
Ограниченная поддержка pushdown-предикатов. Pushdown-предикаты корректно работают только с API, которые поддерживают фильтрацию параметров запроса и полностью описаны в OpenAPI-схеме. Могут наблюдаться проблемы с производительностью на больших объемах данных, поскольку из-за отсутствия pushdown-предикатов коннектор сначала загружает весь набор данных в память и только затем выполняет фильтрацию.