A simple micro-framework to expose your relational datastore as a GraphQL API (powered by Node.js).
GraphQL is a powerful solution for making your server side data available to clients through a flexible and bandwidth efficient API.
However, if your primary data source is a relational database then mapping GraphQL queries to efficient database queries can be arduous. With naive hierarchical resolution of resolvers it is very easy to end up with inefficient data access patterns and N+1 queries. Caching strategies, dataloader etc. partly mitigate the problem but the fact remains that you are not taking the full advantage of the capabilities of your powerful datastore.
GRelDAL is a low level library that gives you a declaritive API to map your relational data sources to GraphQL APIs. It is data store agnostic thanks to Knex, the underlying data access library that supports all common databases. Currently MySQL, PostgreSQL and SQLite are well tested.
When you generate your GraphQL API through GRelDAL, you can choose exactly how:
- Your database table schema maps to GraphQL types.
- Your GraphQL queries are mapped to SQL queries, including:
- which tables can be joined under which circumstances
- when batched queries can be performed
- when related rows can be fetched in advance in bulk, etc.
Plus, unlike many other similar solutions, GRelDAL has first class support for subscriptions, stored procedures, user defined functions, JSON/XML/binary data and custom column types.