Discover graphql-sequelize-generator and the magic of schema-generated GraphQL!
Graphql-sequelize-generator is a library that will help you to quickly setup a Node.js POC/MVP with Sequelize and GraphQL.
When we started to work on Teamstarter we wanted to quickly test it on our user base and see if the concept worked. We needed a very simple implementation of the core of the concept, a private crowdfunding platform for organizations, a proof of concept (POC).
Usually, when I do a small POC of a random idea, most of the time it ends up as a dead repository on my Github after a few weeks, like an ECS based on redux or a procedural generation library based on Postgis. Many ideas, low energy: Motivation is bitch 😩.
I learned through a painful experience that the quicker I produce a POC, bigger is the chance I kept some motivation to iterate on it and make something of it at the end.
But being fast is sometimes not enough. From times to times, I get super motivated after reading a tweet or an article and search for an old repository to get it back on his foot. Sadly, most of the times my “fast and ugly" code prevent me to do so by being impossible to understand! 🤬😭.
To sum up, in my experience, a useful POC is:
- 🏃🏾♀️ Created quickly
- 📚 Simple to iterate on
- 👀 Easy to understand and pick up after having forgotten about it
GraphQL is amazing for many reasons (here, here and here) and is a top choice for efficient API development nowadays.
Yet, even if it might generate a nice and easily understandable API, it is most of the time painfully slow to setup and extend compared to REST 🥵.
The setup is slow because you have to spend time describing your schema field by field, while there is a huge chance you already did it in your ORM.
The addition of new endpoint is slow too as GraphQL only describe what a resolver(link) is and not basic methods to fetch the data in your database.
After a few painful POCs we decided to work on tools that could help on the two last points, setup and extendability.
From those problems we created graphql-sequelize-generator 🎉
The setup is way faster by using the definition of the ORM (Sequelize) to generate procedurally the endpoints. We do not generate a full schema by default, it’s up to you to decide what do you want to expose. But it only takes 3 lines of code!
The extendability is solved by using graphql-sequelize and custom made create/update/delete mutations.
We also provide a lot of hooks and advanced options that you can discover in the documentation.
For both we tried to reduce the setup to a bare minimum:
$ git clone email@example.com:teamstarter/gsg-boilerplate.git; cd gsg-boilerplate $ nvm use $ yarn $ yarn db-reset $ yarn dev
And you’re good to go!
We did not intend to develop something that could do more than a POC as deeply nested queries tends to end in a huge amount of database queries.
But surprisingly, thanks to our configuration of grapghl-dataloader your POC can become an MVP without any problem! 🥳 By hooking on Sequelize query hooks and batching the intercepted requests, the query count is kept to an acceptable level.
To make is easier to understand you will find below a small visualisation of the problem and the solution ✍️
We are currently using it in production with a Postgres AWS medium database, with more than 20000 active users per month and have no performances problems! 🚀
Also, due to its minimal code footprint the maintenance is really easy and simple 😊
We are using GSG every day and we hope that some of your next ideas will avoid the Github graveyard of the forgotten projects! 🙏
If you have any problem with the lib or the boilerplates, do not hesitate to open an issue on Github or submit a PR!
If you want to discover GraphQL :
- Zero To GraphQL In 30 Minutes https://www.youtube.com/watch?v=H8YnVk2vhzg
- A recent white paper on how using Graphql could be faster than Rest
- A few slides on how GraphQL is a good fit for a startup
More about GraphQL-Sequelize-Generator
You are a junior dev able to work in Paris quickly? Reach us!