I've had a lot of experience with REST & JSON API and those "generators" or abstraction people create always end up being very inflexible. With GraphQL, you have full control on what you return, as well full control over how you want to change your data. Easy to avoid n+1 etc. Maybe that's just me, but I think this question is already answered. Took us a few years to discover a better way.
I've been using GraphQL for the last 2 years and haven't had ANY complaints so far. It doesn't try to push you some mindset of how should things look like and instead just try to get out of the way, enabling you do craft requests and responses as you'd like. Of course, with that power, you need to make sure that things stay consistent, but that problem also exists for REST/JSON API's.