Беше пуснат 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 операции в отговора на местоположението, да изпълняват OPTIONS заявки и да прилагат поддръжка на OpenAPI.
- Чрез RPC POST е позволено да се извикват функции с един неназован параметър.
- Разрешено е да се извикват функции с един JSON параметър без заглавката „Предпочитам: params=single-object“.
- Разрешено е да се зареждат данни от тип bytea във функции, използвайки заявки с „Content-Type: application/octet-stream“.
- Разрешено е зареждане на текст във функции чрез заявки с „Content-Type: text/plain“.
- Добавена е поддръжка за екраниране на символи в двойни скоби, например "?col=in.("Двойна\"цитат"), ?col=in.("Назад\\наклонена черта")".
- Предоставена е възможност за филтриране на ресурси от първо ниво въз основа на вградени филтри (“/projects?select=*,clients!inner(*)&clients.id=eq.12”).
- Операторът "is" позволява стойността "unknown".
- Постигната е съвместимост с PostgreSQL 14 и поддръжката за PostgreSQL 9.5 е преустановена.
Източник: opennet.ru