El método HTTP QUERY, definido recientemente en el RFC 10008, nace para cubrir un hueco existente en el diseño de APIs REST: la necesidad de realizar consultas de solo lectura que transporten un cuerpo de petición. Hasta ahora, los desarrolladores que querían enviar filtros complejos, estructuras anidadas o datos no ASCII se topaban con las limitaciones de la URL en GET —codificación obligatoria, longitudes máximas, formatos ambiguos para arrays— o con los problemas semánticos de usar POST, un método no idempotente y pensado para crear recursos, que rompe cachés automáticas y complica los reintentos. QUERY se comporta como GET, con cuerpo de petición, y mantiene las garantías de seguridad e idempotencia.
Entre sus características, QUERY admite almacenamiento en caché, siempre que la implementación incorpore el contenido del cuerpo en la clave de caché, y permite expresar consultas relacionales complejas sin saturar la URL. La llegada de QUERY no implica abandonar GET: las consultas sencillas con parámetros en la URL siguen siendo válidas, y los enlaces compartibles o marcables deben mantenerse en GET, ya que QUERY no puede representarse en una URL. Conviene tener en cuenta, además, que el soporte en clientes, proxies y servidores web es todavía escaso y que la caché personalizada resulta más compleja que en GET. Herramientas como Kreya, en su versión 1.20, ya incorporan soporte nativo para este método. En resumen, QUERY sustituye a POST en operaciones de lectura y conviene considerarlo cuando GET se queda corto.
