I see your point about reducing network requests (graphql lets you co-mingle mutations and queries), but I don't think that feature is used often enough, b/c what if one query fails, then everyone has to fail).
I see your point about reducing network requests (graphql lets you co-mingle mutations and queries), but I don't think that feature is used often enough, b/c what if one query fails, then everyone has to fail).
Caching is trivial to do with REST.
The "really nice caching" that Apollo does literally deserializes and deep inspects both the request and the response to try and figure out caching on specific fields. Also, POST requests are not cacheable according to HTTP spec.
With REST you set an ETag and/or Cache-Control headers and let your existing infra and client browsers handle that.
Or you use Accept header for its intended purpose
Accept: com.company.user-aggregated/json
Accept: com.company.user-aggregated-lite/json
etc.
And let the server return the fields defined by the relevant schemas.
I mean, the advise given for GraphQL in prod is to literally call predefined queries only.