A nova método HTTP QUERY explicada

O que o QUERY pretende resolver

  • Visto como uma formalização de “GET com corpo”: seguro, idempotente, cacheável, mas podendo transportar um corpo de requisição.
  • Destinado a substituir gambiarras como GET-com-corpo ou POST-para-consultas (por exemplo, busca, consultas GraphQL).
  • Defensores dizem que ele esclarece a semântica para intermediários: “isto pode ser cacheado, é somente leitura e tem um corpo.”

Por que não simplesmente corrigir o GET?

  • Um grupo: simplesmente padronizar GET-com-corpo; QUERY é redundante, “inchaço” de padrões estilo XKCD.
  • Contraponto: muitos proxies, WAFs, CDNs e frameworks existentes removem ou rejeitam corpos em GET ou os tratam como sem sentido.
  • Mudar a semântica do GET criaria comportamento indefinido em sistemas legados; um novo método pode falhar de forma limpa com 405 e permitir fallback para POST.
  • Alguns argumentam que ambos os caminhos exigem atualizar a infraestrutura de qualquer forma; veem QUERY como marketing, não como necessidade técnica.

Compatibilidade, middleboxes e navegadores

  • Há preocupações de que middlewares “caixa-preta” mal mantidos possam lidar mal com novos verbos ou travar.
  • Outros dizem que os padrões precisam evoluir apesar do hardware e software legados; infraestrutura quebrada deve ser corrigida.
  • Vários observam que é improvável que navegadores implementem QUERY tão cedo (ou ao menos não há garantia disso); isso limita a adoção voltada à web.
  • O cabeçalho Accept-Query e OPTIONS/405 são citados como mecanismos para negociar suporte.

Casos de uso propostos

  • APIs de busca como Elastic/OpenSearch atualmente abusando de GET-com-corpo ou POST; QUERY seria um encaixe natural.
  • GraphQL: usar QUERY para consultas somente leitura, POST para mutações.
  • Filtragem/busca complexa em aplicativos web: corpos JSON em vez de strings de consulta longas.
  • Busca reversa por imagem e outras consultas baseadas em arquivo ou binário.

Cache, semântica e REST

  • QUERY é definido como cacheável e idempotente; isso abre cache em CDN/proxy, ao contrário do POST.
  • Céticos observam chaves de cache práticas: corpos não têm uma forma canônica padrão (ordenação de JSON, espaços em branco), complicando caches compartilhados.
  • Alguns argumentam que QUERY melhora a clareza de REST/CRUD ao separar o GET simples por URL de consultas mais complexas; outros dizem que é possível modelar consultas como recursos (POST para criar, depois GET).

Segurança, WAFs e pontos de dor práticos

  • Muitos citam sistemas do mundo real que rejeitam ou removem corpos em GET (WAFs, CloudFront, gateways de API restritivos).
  • QUERY é visto como uma forma de evitar esses comportamentos indefinidos e regras de segurança que tratam GET-com-corpo como suspeito.
  • Outros alertam que o próprio QUERY não será suportado por esses sistemas inicialmente, então a migração continua não trivial.