Inženýrský výbor IETF (Internet Engineering Task Force), který se zabývá rozvojem protokolů a architektury internetu, udělil metodě QUERY status "Návrhového standardu" a zveřejnil s ní související specifikaci RFC 10008. Metoda QUERY způsobem odeslání dat na server napodobuje metodu POST, ale liší se od ní zaměřením nikoli na zápis dat a změnu stavu, ale na formulaci dotazů na čtení.
Z hlediska řešených úloh je nová metoda blízká GET a umožňuje odesílat dotazy, které mohou být opakovány nebo restartovány bez změny stavu na serveru. Stejně jako u metody POST jsou parametry dotazu v QUERY odesílány nikoli v URI, ale v těle dotazu. Tento přístup umožňuje přenášet velké množství parametrů v dotazu, což překračuje limit velikosti parametrů v metodě GET (8000 bajtů).
GET /feed?q=foo&limit=10&sort=-published HTTP/1.1
Host: example.org
QUERY /feed HTTP/1.1
Host: example.org
Content-Type: application/x-www-form-urlencoded
q=foo&limit=10&sort=-published
Parametry odeslané metodou QUERY se neodrážejí v logách servery, což na jedné straně ztěžuje analýzu dotazů a diagnostiku problémů, ale na druhé straně dává možnost skrýt důvěrná data z logů proxy serverů.
Mezi oblasti použití metody QUERY patří odesílání dotazů na Web API, které vrací výsledky ve formátu JSON nebo XML, nebo backendy generující obsah. Pro určení možnosti využití nové metody při přístupu k serveru se doporučuje použít metodu OPTIONS, a pro určení podporovaných formátů metodu HEAD:
> OPTIONS /contacts HTTP/1.1
> Host: example.org
HTTP/1.1 200 OK
Allow: GET, QUERY, OPTIONS, HEAD
V metodě QUERY je podpora cache - proxy servery nebo zpracovatelé mohou uložit výsledek provedení dotazu, přiřadit mu URI pro následné vyhledávání přes metodu GET a vrátit informace o zaslání procházené verze prostřednictvím hlavičky "Last-Modified". Pro kontrolu existence změn od posledního dotazu může být použitá hlavička "If-Modified-Since". Pro uvedení alternativních variant provedení dotazu mohou být v odpovědi uvedeny hlavičky "Content-Location" a "Location", jejichž rozdíl spočívá v tom, že první předává odkaz pro získání výsledku dříve provedeného dotazu, zatímco druhý je určen pro opakování dotazu se stejnými parametry.
> QUERY /contacts HTTP/1.1
> Host: example.org
> Content-Type: application/x-www-form-urlencoded
> Přijmout: application/json
> vybrat=příjmení,jméno,email&limit=10&shoda=email=*@example.*
HTTP/1.1 200 OK
Typ obsahu: application/json
Umístění obsahu: /contacts/stored-results/17
Umístění: /contacts/stored-queries/42
Nap poslední úpravy: So, 25 srp 2012 23:34:45 GMT
Datum: Ne, 17 lis 2024, 16:10:24 GMT
> GET /contacts/stored-results/17 HTTP/1.1
> Host: example.org
> Přijmout: application/json
Kromě typu «application/x-www-form-urlencoded» lze pro předávání parametrů v dotazech QUERY také přímo použít rozšířené formáty, jako jsou JSONPath (application/jsonpath), XSLT (application/xslt+xml) a SQL (application/sql). Podporované formáty se vracejí serverem v hlavičce Accept-Query.
> HEAD /contacts HTTP/1.1
> Host: example.org
HTTP/1.1 200 OK
Typ obsahu: application/xhtml
Accept-Query: application/x-www-form-urlencoded, application/jsonpath, application/sql
> DOTAZ /errata.json HTTP/1.1
> Host: example.org
> Typ obsahu: application/jsonpath
> Přijmout: application/json
>
> $..[
> ?@.errata_status_code==„Odmítnuto“
> && @.submit_date>„2024″
> ]
> [„doc-id“]
Zdroj: opennet.ru
