PostgREST, una API REST para cualquier base de datos PostgreSQL escrita en Haskell
PostgREST es un servidor web independiente que transforma cualquier base de datos PostgreSQL directamente en una API RESTful. Escrito en Haskell, ofrece un AP mucho más limpio, más compatible con los estándares. Mientras que las restricciones estructurales y los permisos de la base de datos determinan los puntos finales y las operaciones de la API.
La documentación de PostgREST lo describe como una “alternativa a la programación CRUD manual”. PostgREST es un middleware de código abierto y las API expuestas por PostgREST cumplen con la especificación OpenAPI (anteriormente conocida como la especificación Swagger). De acuerdo con su documentación, administra de forma nativa las dependencias entre las tablas de su base de datos, lo que le permite a través de una simple solicitud REST recuperar datos de una unión entre dos tablas.
PostgREST sería muy rápido con un tiempo de respuesta de menos de un segundo para hasta 2000 solicitudes por segundo en el nivel gratuito de Heroku.
“Si está acostumbrado a servidores escritos en idiomas interpretados, prepárese para sorprenderse gratamente por el desempeño de PostgREST”, dice el equipo.
Tres factores contribuyen a esta velocidad según el equipo.
- Primero, el servidor está escrito en Haskell usando el servidor HTTP Warp (un lenguaje compilado).
- Luego, delega tantos cálculos como sea posible a la base de datos, incluida la serialización de respuestas JSON directamente en SQL, validando datos, etc.
- Finalmente, utiliza la biblioteca Hasql para mantener un grupo de conexiones de base de datos, el protocolo binario PostgreSQL, y permanece sin estado para permitir el escalado horizontal.
PostgREST maneja la autenticación (a través de JSON Web Tokens) y delega la autorización a la información del rol definida en la base de datos. Esto asegura que solo haya una fuente declarativa de verdad para la seguridad.
Al tratar con la base de datos, el servidor asume la identidad del usuario autenticado actualmente y durante la conexión no puede hacer nada que el propio usuario no pueda hacer. Se pueden construir otras formas de autenticación en la primitiva JWT.
Por otro lado cuando se trata de la integridad de los datos, PostgREST en lugar de confiar en un Object Relational Mapper (ORM) y una codificación imperativa personalizada, este sistema impone restricciones declarativas directamente en su base de datos.
Por lo tanto, ninguna aplicación puede dañar sus datos (incluido su servidor API). PostgREST expone la interfaz HTTP con diversas copias de seguridad para evitar problemas, incluida la aplicación de solicitudes PUT. En otras palabras, no hay ORM involucrado.
La creación de nuevas vistas se produce en SQL con implicaciones de rendimiento conocidas. Lo mejor de PostgREST es que un administrador de base de datos puede crear una API desde cero sin programación personalizada.
Para algunos, PostgREST también es una alternativa interesante a una base de datos NoSQL o GraphQL expuesta de forma nativa en API si necesita mantener un modelo relacional. Les resulta lamentable que este middleware no esté disponible como estándar en los repositorios de paquetes de grandes distribuciones de Linux.
¿Como instalar PostgREST en Linux?
La versión 6.0.2 se lanzó en agosto pasado con nuevas adiciones y algunos cambios. Esta versión se puede obtener desde github.
De igual forma, para quienes estén interesados en poder instalar PostgREST, deben saber que se puede obtener la actual versión en estos momentos con ayuda de una terminan. Solo en ella vamos a teclear:
wget https://github.com/PostgREST/postgrest/releases/download/v6.0.2/postgrest-v6.0.2-linux-x64-static.tar.xz
Ahora solo deben de descomprimir el paquete con el siguiente comando:
tar Jxf postgrest-v6.0.2-linux-x64-static.tar.xz
Mientras que para el caso en especial de los que utilizan una versión de Ubuntu de 64 bits:
wget https://github.com/PostgREST/postgrest/releases/download/v6.0.2/postgrest-v6.0.2-ubuntu.tar.xz
tar Jxf postgrest-v6.0.2-ubuntu.tar.xz
O para quienes utilizan una versión de 32 bits de Ubuntu
wget https://github.com/PostgREST/postgrest/releases/download/v6.0.2/postgrest-v6.0.2-ubuntui386.tar.xz
tar Jxf postgrest-v6.0.2-ubuntui386.tar.xz
Y pueden ejecutar con:
./postgrest --help
De igual forma una imagen de Docker esta preparada, está la pueden obtener tecleando:
docker pull postgrest/postgrest
Finalmente pueden obtener más información sobre la configuración de ello, desde la documentación en su página web. El enlace es este.