Ocorreu o lançamento do PostgREST 9.0.0, um servidor web operando separadamente com a implementação de um complemento leve para o SGBD PostgreSQL, traduzindo objetos de um banco de dados existente em uma API RESTful. Em vez de mapear dados relacionais em objetos (ORMs), o PostgREST cria visualizações diretamente no banco de dados. O lado do banco de dados também lida com a serialização de respostas JSON, validação de dados e autorização. O desempenho do sistema é suficiente para processar até 2000 solicitações por segundo em um servidor típico. O código do projeto é escrito em Haskell e distribuído sob a licença do MIT.
Por exemplo, usando apenas o mecanismo de privilégios do banco de dados, você pode conceder acesso aos dados (tabelas, tipos de visualização e procedimentos armazenados) por HTTP. Neste caso, não há necessidade de codificar tal tradução e normalmente um comando GRANT é suficiente para disponibilizar a tabela através da API REST. É possível configurar o acesso por token (JWT) e organizar “multitenancy” através do uso de segurança dinâmica em nível de linha (Row Level Security).
Arquitetonicamente, o PostgREST avança em direção a uma arquitetura orientada a dados (Data-Oriented Architecture), onde os microsserviços não salvam estados por si próprios, mas usam um único acesso aos dados (Data Access Layer) para isso.
Entre as mudanças na nova versão:
- Tabelas particionadas foram adicionadas ao cache do esquema de armazenamento, o que possibilitou que tais tabelas incorporassem operações UPSERT e INSERT na resposta Location, executassem consultas OPTIONS e implementassem suporte OpenAPI.
- Via RPC POST é permitido chamar funções com um parâmetro sem nome.
- É permitido chamar funções com um parâmetro JSON sem o cabeçalho “Prefer: params=single-object”.
- É permitido carregar dados do tipo bytea em funções utilizando consultas com “Content-Type: application/octet-stream”.
- Permitido carregar texto em funções usando consultas com "Content-Type: text/plain".
- Adicionado suporte para caracteres de escape dentro de colchetes duplos, por exemplo, "?col=in.("Double\"Quote"), ?col=in.("Back\\slash")".
- A capacidade de filtrar recursos de primeiro nível com base em filtros integrados (“/projects?select=*,clients!inner(*)&clients.id=eq.12” foi fornecida.
- O operador “is” permite o valor “desconhecido”.
- A compatibilidade com PostgreSQL 14 foi alcançada e o suporte para PostgreSQL 9.5 foi descontinuado.
Fonte: opennet.ru