Resumo / Pontos-chave
- Um novo método HTTP chamado QUERY chegou para corrigir a forma falha como lidamos com buscas complexas.
- Ele finalmente encerra o abuso do POST para APIs somente leitura.
O Pecado Semântico Que Todos Cometemos
Por décadas, recuperar dados frequentemente significava codificar parâmetros de busca diretamente na string de consulta URL de uma requisição GET. Essa abordagem rapidamente falhou com buscas complexas envolvendo consultas relacionais ou dados profundamente aninhados. URLs inchavam, frequentemente atingindo limites de comprimento de navegador ou servidor, e expondo todos os parâmetros claramente em logs de servidor e histórico do navegador.
Para contornar as restrições de URL, desenvolvedores adotaram uma solução alternativa: usar requisições POST para transportar filtros de busca complexos dentro do corpo da requisição. Isso, no entanto, criou uma violação semântica significativa. `POST` é fundamentalmente projetado para criar novos recursos, não para a recuperação segura e idempotente de dados existentes.
O uso indevido de `POST` para busca acarretou consequências tangíveis. Quebrou mecanismos de cache, pois proxies raramente armazenam em cache respostas `POST` devido à sua natureza não-idempotente. Além disso, sua característica não-idempotente impedia que clientes realizassem retentativas automáticas com segurança em falhas de rede, uma capacidade fundamental de operações verdadeiramente somente leitura.
Uma tentativa menos comum, mas igualmente problemática, envolvia o envio de um corpo de requisição com um método `GET`. Embora a especificação HTTP/1.1 permitisse isso ambiguamente, ela afirmava explicitamente que tal corpo não possuía "semântica definida" e "DEVERIA ser ignorado." Isso tornou o "GET com corpo" um mito não confiável e não padronizado, nunca ganhando suporte consistente na infraestrutura da web.
QUERY: A Segurança do GET, o Poder do POST
Finalmente, o método HTTP query (RFC 10008) chegou, formalmente padronizado em junho de 2026. Ele representa o "método ausente para busca", construído especificamente para abordar as soluções alternativas semânticas que os desenvolvedores têm usado por mais de duas décadas. Este novo verbo visa especificamente a recuperação de dados complexos e somente leitura.
Query combina elegantemente os melhores atributos de seus predecessores. Assim como GET, é seguro e idempotente, o que significa que nunca altera o estado do servidor e requisições idênticas produzem consistentemente o mesmo resultado. Essa propriedade permite retentativas robustas do cliente em caso de falhas. Crucialmente, como POST, ele aceita um corpo de requisição, fornecendo amplo espaço para parâmetros de consulta.
Este design híbrido resolve diretamente o problema central da recuperação de dados ricos. Desenvolvedores agora podem enviar estruturas de consulta intrincadas e profundamente aninhadas, como payloads JSON, dentro do corpo da requisição. Isso evita atingir limites de comprimento de URL do navegador ou servidor e impede a exposição de parâmetros sensíveis em logs. Criticamente, elimina a violação semântica de usar POST para operações que não alteram o estado, finalmente fornecendo uma abordagem padronizada, armazenável em cache e semanticamente correta para buscas avançadas de API.
Cache Mais Inteligente, Melhor Segurança
`QUERY` traz vantagens operacionais significativas além da correção semântica, particularmente em cache e segurança. Seu design aborda desafios de longa data que afligiam `GET` e `POST` em cenários complexos de recuperação de dados.
Respostas geradas por um método `QUERY` são totalmente armazenáveis em cache, espelhando a eficiência do `GET`. Criticamente, o corpo inteiro da requisição é fatorado diretamente na chave de cache. Este mecanismo sofisticado garante que cada corpo de consulta único, independentemente do URI, produza uma entrada de cache distinta, facilitando a recuperação de dados precisa e eficiente.
Um mecanismo de descoberta integrado aprimora ainda mais a utilidade de `QUERY`: o cabeçalho `Accept-Query`. Os servidores agora podem anunciar explicitamente os formatos de consulta específicos que suportam, simplificando a comunicação cliente-servidor e melhorando a descoberta da API. Os clientes ganham clareza sobre as sintaxes esperadas, reduzindo o atrito na integração.
Segurança e privacidade também apresentam melhorias notáveis. `QUERY` não é um CORS-safelisted method, exigindo uma solicitação `OPTIONS` de preflight para chamadas de origem cruzada e reforçando a segurança de aplicações web. Mais importante, ele mantém parâmetros de consulta sensíveis fora das URLs, impedindo sua exposição em logs de servidor, registros de proxy e histórico do navegador, uma vitória significativa para a privacidade em relação ao `GET`.
Este design cuidadoso torna `QUERY` uma solução robusta para as necessidades modernas de API. Para especificações técnicas mais aprofundadas, consulte RFC 10008: The HTTP QUERY Method, que detalha suas capacidades completas e implicações para a arquitetura web.
Enjoying this? Get one like it in your inbox each morning.
one email a day · unsubscribe in two clicks · no third-party tracking
O Caminho para a Adoção: Uma Verificação da Realidade
`QUERY` (RFC 10008) está agora formalmente padronizado, um passo crítico para a semântica HTTP. Apesar desta conquista fundamental, a adoção generalizada em todo o ecossistema web permanece em seus estágios iniciais. Navegadores, diversos frameworks web e proxies de rede estão progressivamente implementando seu suporte para este novo método, um processo que leva tempo para uma mudança de protocolo fundamental.
O impulso está claramente crescendo, com players-chave já integrando `QUERY` em suas plataformas. O OpenAPI 3.2 agora suporta formalmente o método `QUERY`, permitindo que arquitetos e desenvolvedores definam esses novos e poderosos endpoints diretamente em suas especificações de API. O framework .NET 10 da Microsoft também oferece suporte inicial e robusto, indicando um forte sinal para uma integração mais ampla do framework e encorajando a experimentação inicial.
As organizações devem planejar estrategicamente a eventual onipresença de `QUERY`. Para novos e complexos endpoints somente leitura, projete com `QUERY` desde o início, mas implemente fallbacks robustos para `POST` ou `GET` para compatibilidade. Finalmente, prepare-se para atualizar os firewalls de aplicações web (WAFs) e as configurações de proxy existentes; esses sistemas devem aprender a interpretar, rotear e armazenar em cache corretamente as requisições `QUERY` para uma operação contínua.
Perguntas Frequentes
O que é o novo método HTTP QUERY?
É um novo verbo HTTP padronizado (RFC 10008) projetado para pesquisa complexa e recuperação de dados. Ele combina a segurança e a capacidade de cache de uma requisição GET com a capacidade de transportar um corpo de requisição como uma requisição POST.
Por que não usar apenas GET com um corpo de requisição?
O comportamento de uma requisição GET com um corpo é indefinido na especificação HTTP. Isso leva a um tratamento inconsistente e não confiável por parte de servidores, proxies e caches, tornando-a uma solução impraticável.
O método QUERY está pronto para uso em produção?
Ainda não para a maioria das aplicações. Embora esteja oficialmente padronizado, o suporte generalizado em navegadores, frameworks de servidor e infraestrutura como proxies e WAFs ainda está nos estágios iniciais.
Como o QUERY melhora o cache em relação ao uso de POST para pesquisa?
As respostas POST geralmente não são armazenadas em cache por intermediários como proxies ou CDNs. As respostas QUERY são explicitamente projetadas para serem armazenáveis em cache, com o conteúdo do corpo da requisição usado como parte da chave de cache, melhorando significativamente o desempenho.
