Using a CDN in front of an api is not that uncommon from what I have seen.
And with clients basically creating their own queries, I imagine the performance implications will be less predictable than with a more rigid REST API.
- Canonicalize the query to identify queries that look different but are actually equivalent; use the hash of the canonicalized query as a cache key. You can do this on the edge cache, or on the backend.
- Cache more full-bodied resources, where additional fields are present, and perform the filter at evaluation time.
And with clients basically creating their own queries, I imagine the performance implications will be less predictable than with a more rigid REST API.