[1] https://httpwg.org/http-extensions/draft-ietf-httpbis-safe-m...
[1] https://httpwg.org/http-extensions/draft-ietf-httpbis-safe-m...
Semantically, such queries are cacheable, but the request being POST, intermediate edge proxies or CDNs won't cache the request. This means clients pay the penalty every single time. Moreover, browsers can't have url-based history with such solutions, as POST requests can't "go back".
So QUERY fixes this. Semantically. Now you have to build support in middle boxes for it, and browsers must support it as well.
Given this legacy, QUERY seems like an adequate solution. However, it seems to me like it's only intended for read queries. Write queries are generally not cacheable semantically, at least not in my world. Was the naming influenced by GraphQL by any chance, which distinguishes between queries (read) and mutations (write)?
That doesn't mean that the server can't change the resource itself for other unrelated reasons.
You can even use custom methods. I have a server that responds to the SALAMI method.