Biggest problem is that people just dont understand graphql for some reason. Using graphql is really hard for a lot of developers, in my experience. They just don’t get it, don’t understand the syntax, don’t get separation of query and variables, and really don’t get why an error is returned as 200 ok.
The typing system is also not enforced perfectly. If you got an enum input value, the client can just submit another value not included in the enum and apollo server just doesn’t care.
This gives me a false sense of security, and prompted us to add these validations in all resolvers, so now we have schema definitions and matching validations, basically repeating the schema twice.
The api doc generators and sandboxing tools are generally poor or I haven’t found a nice one.
Apollo’s built-in caching is a mystery and poorly documented, and HTTP based caching isn’t really supported.
I might be using it wrong - I rarely felt Graphql did actually help me in some way.
If the goal is B2B server-to-server I would recommend to look at gRPC+Protobuf as typing is enforced.
Also incrementing your API while keeping the old one around is relatively easy to do.