Релиз PostgREST 9.0.0, надстройки для превращения БД в API RESTful

Состоялся релиз PostgREST 9.0.0, отдельно работающего веб-сервера с реализацией легкой надстройки к СУБД PostgreSQL, транслирующей объекты из существующей базы данных в RESTful API. Вместо отражения реляционных данных в объекты (ORM) в PostgREST представления создаются прямо в базе данных. На стороне БД также выполняется сериализация ответов JSON, проверка данных и авторизация. Производительности системы достаточно для обработки до 2000 запросов в секунду на типовом сервере. Код проекта написан на языке Haskell и распространяется по лицензии MIT.

Например, используя только механизм привилегий в базе данных, можно предоставить доступ к данным (таблицам, видам представлений и хранимым процедурам) по протоколу HTTP. При этом нет необходимости кодирования такой трансляции и обычно достаточно одной команды GRANT, чтобы таблица стала доступна по REST API. Имеется возможность настроить доступ по токену (JWT) и организовать “multitenancy” через использование динамической безопасности на уровне строк (Row Level Security).

Архитектурно PostgREST подталкивает к данно-ориентированной архитектуре (Data-Oriented Architecture), где микросервисы не сохраняют состояния сами, а используют для этого единым доступом к данным (Data Access Layer).


Среди изменений в новой версии:

  • В кэш схемы хранения добавлены секционированные (партицированные) таблицы, что позволило для подобных таблиц встраивать операции UPSERT и INSERT в ответ Location, выполнять запросы OPTIONS и реализовать поддержку OpenAPI.
  • Через RPC POST разрешено вызывать функции с одним неименованным параметром.
  • Разрешено вызывать функции с одним JSON-параметром без заголовка
    “Prefer: params=single-object”.
  • Разрешено загружать в функции данные с типом bytea, используя запросы с “Content-Type: application/octet-stream”.
  • Разрешено загружать в функции текст, используя запросы с “Content-Type: text/plain”.
  • Добавлена поддержка экранирования символов внутри двойных скобок, например, “?col=in.(“Double”Quote”), ?col=in.(“Back\slash”)”.
  • Предоставлена возможность фильтрации ресурсов первого уровня на основе встроенных фильтров (“/projects?select=*,clients!inner(*)&clients.id=eq.12”.
  • В операторе “is” разрешено использование значения “unknown”.
  • Обеспечена совместимость с PostgreSQL 14 и прекращена поддержка PostgreSQL 9.5.

Release. Ссылка here.