biff.graph es una biblioteca del framework Biff, escrita en Clojure, que permite modelar los datos de una aplicación como un grafo consultable y extensible. Su propósito es unificar el acceso a la base de datos y a la lógica de negocio en una misma interfaz: el código de aplicación declara la forma de los datos que necesita sin tener que conocer cómo se obtienen. Para ello, el modelo de datos se divide en pequeños fragmentos independientes llamados "resolvers", cada uno con una consulta de entrada y otra de salida.
La biblioteca es una versión simplificada de Pathom, de la que solo implementa un subconjunto de funcionalidades a cambio de ofrecer una base de código mucho más pequeña —unas 600 líneas, con el motor de ejecución de consultas en torno a 200 líneas—. Incorpora soporte para resolvers por lotes y caché, pero prescinde de la planificación de consultas, por lo que puede ser menos eficiente que Pathom en algunos casos. Utiliza un subconjunto ligeramente modificado del lenguaje EQL y de los patrones pull de Datomic para describir la forma de los datos.
En la práctica, los desarrolladores definen resolvers automáticos a partir del esquema de la base de datos (uno por tabla o tipo de entidad, con su clave primaria como entrada y el resto de columnas como salida, incluyendo las claves foráneas como joins) y añaden resolvers personalizados para datos derivados. Estos se registran con new-ctx, que aplica middleware de caché y validación, y se consultan con com.biffweb.graph/query desde cualquier punto de la aplicación, como un handler de Ring. Cuando un resolver falla, la excepción incluye información de trazado que indica la ruta que ha provocado el error.
La versión documentada es 2.0.0-rc7, una release candidate que podría sufrir cambios hasta que se publiquen el resto de bibliotecas de Biff 2.
