DEPRECATION NOTE:
This project has started a couple of years ago as we intended to create a way to allow developers to focus on building a structured domain based on well defined patterns instead of having the mess of loose uncoupled resolvers.
Unfortunately we haven’t had the proper time to develop this project further, so it has never gained enough momentum. Since then, as well, lots has changed in the ecosystem. A lot of the goals of this project have already been achieved by other projects, such as https://prisma.io.
Prisma is probably the way to go if you look for something mature and reliable. If you feel adventurous, though, you can take a look at our new experiment: https://github.com/zvictor/faugra.
"Have no fear of perfection, you’ll never reach it." - Salvador Dali
This project aims to be a place for the community to spread good practices and the use of related technologies.
It is inspired by the tutorial How to build a GraphQL server and its repository.
There will never be an agreement on a perfect boilerplate project for any technology we are aware of and it would not be different for a GraphQL-based project. But it doesn't mean we should not try to get as close as we can get from it. So please don't mind our pretentious project name, it's just a catchy one.
As simple as that:
git clone https://github.com/Quadric/perfect-graphql-starter
cd perfect-graphql-starter
npm install
npm start
-
Paste this on the left side of the page:
(Run)
{
getAuthor(_id: 2) {
lastName
posts {
text
}
}
}
- Hit the play button (cmd-return), then you should get this on the right side:
{
"data": {
"getAuthor": {
"lastName": "Lombardi",
"posts": [
{
"text": "Perfection is not attainable, but if we chase perfection we can catch excellence.",
}
]
}
}
}
There is more you can try! Go back to the interactive tool and paste any of the following snippets there and check the result:
(Run)
{
getAuthor(_id: 2) { # Almost the same as
firstName # before, but with extra
lastName # fields.
posts {
title
text
views
}
}
}
(Run)
{
getPostsByTitle(titleContains: "fear") {
title # Try adding the 'author'
text # field anywhere inside
views # this block ;)
}
}
(Run)
{
getPostsByAuthor(authorId:1) { # This author has a private
title # post. You should get an
text # Authorization error.
views
}
}