Why use it at all?
A few years ago I was hesitant to make the dive from REST APIs to GraphQL. I wasn't sure I bought into the advantages, and knew they came with challenges that would take away from time to deliver awesome products and ultimately, would add up the hours I'd be juggling tabs of Stack Overflow, AWS Docs, and reference code just to do things that used to be effortless. I think at it's core- I loved AppSync (AWS managed graphQL because of how easy it was to build APIs when you can drive the whole process from simply writing a robust schema, and pressing 'deploy'.
How I approached learning AWS AppSync
The game changer was once I got the hang of writing a bullet-proof schema. To be honest, I got there through a lot of trial and error. I started with simple schemas, and over time would add more models, and more connections. Eventually, one-to-many would become many-to-many, with their own complications when it comes to performance and security. I can't stress enough how much is really just trial and error. Of course- a lot of reading the docs too.
Challenges I faced
I hit a few challenges along the way. The biggest was dealing with AppSync authorization for large, complex schemas. Once a schema starts to have a few many-to-many connections with non-trivial security requirements, the AWS Amplify/AppSync provided directives and transformers start to become less useful. Don't get me wrong, they are great for all the basic requirements, but they start to fall short when it comes to controlling read/write permissions on deeply nested shareable user data. I've recently started using Hasura, so far seems to succeed where AppSync came up short.
AppSync is great if you are working strictly in AWS- but Hasura is better. It's now my go-to infrastructure for new APIs.
Final thoughts and next steps
It took me a long time to learn GraphQL inside and out. It really is a game changer for rapid development of full-stack applications. You can use for web, mobile or whatever else you can dream up. For now I'm going to continue building powerful apps on top of it, and continue to help others learned what I have so they can as well.