Tech Articles


HTTP QUERY: the immediate future of API queries


HTTP QUERY: the immediate future of API queries

A new way to carry complex queries without turning the URL into a puzzle or presenting a read operation as if it were a write.

What happens when a query needs filters, rules, lists, and pagination, but must not change anything at all?

For years, the usual answer involved choosing between two imperfect paths. The first was to place every criterion in the URL of a GET request. The second was to send a request body with POST, even though the real intention was only to retrieve information. HTTP QUERY is designed to fill that gap: a query can carry structured content while explicitly declaring that it is safe and idempotent.

This is not a replacement for GET. GET remains an excellent choice for simple searches, shareable addresses, and clearly identifiable resources. QUERY is aimed at a different situation: advanced filters, configurable reports, catalog exploration, analytics, enterprise search, and requests whose criteria no longer fit comfortably in a URL.

IETF · RFC 10008 · STANDARDS TRACK · JUNE 2026

The HTTP QUERY Method

The specification defines a request that asks the target to process enclosed content safely and idempotently and return the result.

Read the official RFC 10008 document at RFC Editor →

An important status clarification: QUERY began and circulated as an IETF HTTP proposal. Since June 2026, it is no longer merely a draft: it has been published as RFC 10008 on the Standards Track. What remains at an early stage is practical adoption across APIs, gateways, clients, and developer tools.

GET is not the problem; the problem is what we ask it to carry

GET works beautifully when a query is small: an identifier, a search term, a page number, or a few filters. The difficulty begins when a visual interface lets users combine brands, categories, ranges, states, sorting rules, selected fields, and dozens of conditions.

At that point, a URL can grow into something that is difficult to read, log, copy, and maintain. Every intermediary — browser, proxy, load balancer, server, or security tool — may also impose a different limit. RFC 10008 notes that these limits are not always known in advance and that encoding rich structures into a valid URI adds overhead.

There is also an exposure concern. URLs commonly appear in histories, bookmarks, analytics tools, access logs, and observability dashboards. This does not make QUERY a privacy mechanism — request content still requires proper protection and governance — but it avoids placing the entire search definition directly in the visible address.

Situation GET POST used for querying QUERY
Simple query Natural and universally supported Usually unnecessary Possible, but excessive
Complex JSON query Must be translated into parameters; request content has no defined semantics Carries JSON easily Query content is an expected part of the method
Visible intention Retrieval May look like creation or state-changing processing Safe, idempotent query
Automatic retry Expected Requires knowledge of the API contract Part of the declared semantics
Current adoption Universal Universal Early

Why not keep using POST?

Many APIs already solve complex searches with routes such as POST /search. That is a pragmatic solution and it will remain necessary for years. However, an intermediary that sees only the method cannot know whether that POST creates something, starts a process with side effects, or performs a query that could safely be repeated.

QUERY makes that intention visible at the protocol level. Infrastructure can recognize a safe, idempotent operation; a client can consider retrying it; and a documentation tool can classify it as a query without relying on a private convention. The proposal does not invent a new filter language. It provides a clearer way to express what the request means.

In the official abstract, QUERY processes enclosed content “in a safe and idempotent manner.” That short phrase is the center of the entire design.

A small demo because the ecosystem is only getting started

To explore this immediate future, the Demo_http_query project was created with PowerBuilder 2025 R2 and a local ASP.NET Core API. During preparation of the demo, we did not identify a widely documented public API exposing a QUERY endpoint that would be suitable for a reproducible demonstration. A small, controlled API was therefore built around an in-memory product catalog.

The window builds one query and sends it as GET, POST, or QUERY. It also uses OPTIONS to discover supported methods and the Accept-Query header to advertise the accepted format. The response is displayed as a navigable JSON tree, making the difference between methods visible without hiding the result behind a console.

The experiment confirms another important point: server support alone is not enough. The client, runtime, proxy, and every tool in the path must allow the method to pass. PowerBuilder 2025 R2 transmitted it through HTTPClient.SendRequest("QUERY", ...), while ASP.NET Core received it through a route explicitly associated with the method.

The most visible advantages

Readable queries
Complex filters travel as JSON or another defined format instead of inflating the URL.
Clear intention
The request says that it is a query and that repeating it should not cause partial state changes.
Room to evolve
A structured contract is easier to extend than an ever-growing set of repeated parameters.

RFC 10008 also covers features that make QUERY more than “POST with a different name”: discovery through OPTIONS, formats advertised with Accept-Query, cacheable responses, conditional requests, and the possibility of assigning a URI to either a query or its result.

The challenges of adding QUERY to existing APIs

The existence of a standard does not make adoption instantaneous. New HTTP methods are rare because they cross many layers that have spent years being configured around GET, POST, PUT, PATCH, and DELETE.

  • Gateways and firewalls: method allowlists may reject QUERY until policies are updated.
  • Clients and SDKs: code generators and closed method enumerations may not recognize it yet.
  • CORS: browser-based QUERY requests require preflight because QUERY is not a CORS-safelisted method.
  • Caching and observability: platforms must learn how query content affects result identity, metrics, and traces.
  • Documentation: OpenAPI descriptions, portals, automated tests, and internal policies need a clear representation of the method.
  • Gradual compatibility: keeping GET or POST as a fallback will be reasonable during migration.
QUERY is not a security feature by itself. Data still needs HTTPS, authorization, validation, size limits, logging controls, and protection against expensive queries. “Safe” in HTTP means that the method is not intended to change server state; it does not mean that the content is secret or that an implementation cannot be abused.

A sensible adoption path: begin with the difficult cases

The best approach is unlikely to involve converting every existing GET endpoint. A careful adoption can begin where current limitations are already obvious: enterprise search engines, dynamic reports, analytical queries, geospatial filters, large catalogs, and event explorers.

In those cases, an API can advertise QUERY through OPTIONS and Accept-Query, temporarily retain a compatibility POST endpoint, and measure which intermediaries require adjustment. The change can be incremental, observable, and reversible.

Conclusion: a new word for an intention that already existed

Applications have been sending complex queries for years. What is new is not the need, but the ability to express it directly within HTTP. GET will remain the simplest and most universal retrieval method. POST will remain the broad mechanism for processing. QUERY offers a dedicated space for structured query content without giving up the safe and idempotent semantics expected from a read operation.

The immediate future will depend less on the elegance of the RFC than on how quickly servers, proxies, SDKs, browsers, and observability platforms learn to recognize it. The PowerBuilder demo shows that teams can begin experimenting with that future today in a small, visible, and controlled environment

See demo on CodeXchange

Official sources

Luis Avilan

Comments (0)
There are no comments posted here yet

Find Articles by Tag

CoderObject C# .NET DataStore Open Source PostgreSQL ODBC driver Windows 10 Icons Database Table Web Service Proxy MessageBox Variable PowerBuilder (Appeon) Source Code RibbonBar Builder TortoiseGit DLL Expression SqlModelMapper COM Authentication Elevate Conference Migration Web API Data Source Control Interface Repository Testing Script Linux OS Outlook GhostScript Database Table Data PowerServer Mobile Text PBDOM Transaction Performance OAuth 2.0 Window SnapObjects Visual Studio 32-bit Stored Procedure .NET Std Framework BLOB Installation PBVM SQL Server PDFlib Branch & Merge License RESTClient PowerBuilder DevOps Application TFS Bug External Functions SnapDevelop UI Modernization Charts WebBrowser UI Event Handling InfoMaker Database TreeView PowerScript (PS) WinAPI DataType Class CI/CD iOS Validation Database Table Schema ODBC UI Themes Azure File OLE Resize Sort CrypterObject Import JSON Encoding DataWindow JSON Graph .NET Assembly Deployment Icon Database Profile TLS/SSL Database Connection NativePDF Export Database Object OrcaScript Database Painter SOAP Menu Android Debugging Export JSON PowerBuilder Compiler 64-bit XML ActiveX DataWindow Messagging HTTPClient API Authorization Syntax Design PFC Debug Configuration Automated Testing Service Jenkins JSONGenerator Error PBNI Import Git OAuth SqlExecutor SVN JSON PostgreSQL Excel RichTextEdit Control SQL Event Handler Platform REST Encryption Oracle JSONParser Array Event Model SDK PDF Windows OS Debugger Filter Mobile PowerServer Web DragDrop IDE RibbonBar Trial