Wydano PostgREST 9.0.0, oddzielnie działający serwer WWW z implementacją lekkiego dodatku do PostgreSQL DBMS, tłumaczącego obiekty z istniejącej bazy danych na RESTful API. Zamiast mapować dane relacyjne na obiekty (ORM), PostgREST tworzy widoki bezpośrednio w bazie danych. Strona bazy danych obsługuje również serializację odpowiedzi JSON, sprawdzanie poprawności danych i autoryzację. Wydajność systemu jest wystarczająca do przetworzenia do 2000 żądań na sekundę na typowym serwerze. Kod projektu napisany jest w Haskell i rozpowszechniany na licencji MIT.
Na przykład, korzystając wyłącznie z mechanizmu uprawnień do bazy danych, można udzielić dostępu do danych (tabel, typów widoków i procedur składowanych) za pośrednictwem protokołu HTTP. W takim przypadku nie ma potrzeby kodowania takiego tłumaczenia i zazwyczaj wystarczy jedno polecenie GRANT, aby udostępnić tabelę poprzez API REST. Istnieje możliwość skonfigurowania dostępu za pomocą tokena (JWT) i zorganizowania „multitenancy” poprzez zastosowanie dynamicznego bezpieczeństwa na poziomie wiersza (Row Level Security).
Architektonicznie PostgREST zmierza w stronę architektury zorientowanej na dane (architektura zorientowana na dane), w której mikrousługi same nie zapisują stanów, ale wykorzystują w tym celu pojedynczy dostęp do danych (warstwa dostępu do danych).
Wśród zmian w nowej wersji:
- Do pamięci podręcznej schematu przechowywania dodano partycjonowane tabele, co umożliwiło takim tabelom osadzanie operacji UPSERT i INSERT w odpowiedzi lokalizacji, wykonywanie zapytań OPTIONS i implementację obsługi OpenAPI.
- Poprzez RPC POST można wywoływać funkcje z jednym nienazwanym parametrem.
- Dopuszczalne jest wywoływanie funkcji z jednym parametrem JSON bez nagłówka „Prefer: params=single-object”.
- Dopuszczalne jest ładowanie danych typu bajt do funkcji za pomocą żądań z „Typem treści: aplikacja/strumień oktetu”.
- Zezwolono na ładowanie tekstu do funkcji przy użyciu zapytań z „Typem zawartości: tekst/zwykły”.
- Dodano obsługę znaków ucieczki umieszczonych w podwójnych nawiasach, na przykład „?col=in.(„Double\quote”), ?col=in.(„Back\\slash”)”.
- Dodano możliwość filtrowania zasobów pierwszego poziomu w oparciu o wbudowane filtry („/projects?select=*,clients!inner(*)&clients.id=eq.12”.
- Operator „jest” dopuszcza wartość „nieznaną”.
- Osiągnięto zgodność z PostgreSQL 14 i zaprzestano obsługi PostgreSQL 9.5.
Źródło: opennet.ru