Per anni, gli sviluppatori API hanno dovuto affrontare un dilemma strutturale: come inviare query di ricerca complesse senza saturare i limiti di lunghezza degli URI? La soluzione empirica è stata l'uso del metodo POST per operazioni che, per natura, non modificano lo stato del server. Questa pratica, sebbene diffusa, ha creato un'incoerenza semantica profonda, costringendo cache e intermediari a trattare richieste potenzialmente idempotenti come se fossero operazioni di scrittura.
La pubblicazione della RFC 10008 segna un punto di svolta, introducendo ufficialmente il metodo QUERY. Questo nuovo verbo HTTP è progettato per colmare il vuoto tra GET e POST, permettendo l'invio di un corpo della richiesta (request body) pur garantendo che l'operazione sia safe e idempotente. Come già ipotizzato in una precedente analisi sulla necessità di un metodo dedicato, l'obiettivo è eliminare il "bug logico" che costringe a mentire agli intermediari di rete sulla natura della richiesta.
La fine del compromesso tra GET e POST
Il metodo GET è ideale per il recupero di risorse, ma i parametri passati tramite query string sono soggetti a limiti variabili e spesso restrittivi (alcuni server o proxy tagliano gli URI oltre i 2KB o 8KB). Di converso, il POST permette body di dimensioni quasi illimitate, ma non è considerato sicuro né idempotente per definizione: un client o un proxy non possono ripetere automaticamente una richiesta POST senza il rischio di duplicare un'azione (come un ordine d'acquisto).
Il metodo QUERY risolve questa dicotomia. Secondo le specifiche dell'IETF, esso permette di:
- Inviare payload strutturati (JSON, XML o formati binari) per definire filtri di ricerca complessi.
- Garantire che la richiesta non modifichi lo stato del server (safe).
- Assicurare che l'esecuzione ripetuta della stessa richiesta produca lo stesso risultato (idempotente).
Implicazioni tecniche e caching
Uno dei punti più critici discussi dalla comunità, come emerge dai dibattiti su Hacker News, riguarda la gestione della cache. Tradizionalmente, le chiavi di caching si basano sull'URI. L'introduzione di un body in una richiesta safe complica questo processo: includere l'intero corpo della richiesta nella chiave di cache potrebbe portare a una frammentazione eccessiva o a problemi di performance.
Tuttavia, l'implementazione del metodo QUERY permette agli sviluppatori di essere onesti con l'infrastruttura. Invece di fingere che una ricerca complessa sia un POST, il server e i CDN possono ora implementare strategie di caching specifiche per le query con body, ottimizzando il delivery dei dati senza compromettere l'integrità del protocollo.
Verso un'adozione di massa: il supporto degli stack
Nonostante la formalizzazione della RFC, l'efficacia di QUERY dipenderà dall'aggiornamento dell'intero stack tecnologico. Non basta che il server supporti il nuovo verbo; è necessario un allineamento tra:
- Client HTTP: librerie come
curl,axioso l'APIfetchdevono integrare il supporto nativo. - Framework Server: tool come FastAPI, Spring o Express devono mappare correttamente il metodo QUERY nelle loro rotte.
- Infrastrutture di rete: i CDN e i Load Balancer devono riconoscere QUERY come metodo cacheabile.
Segnali positivi arrivano già dal mondo .NET, dove ASP.NET Core in .NET 11 Preview 4 sta già integrando il supporto per istruire OpenAPI sull'esistenza di questo metodo, facilitando la generazione automatica di documentazione e client.
Prospettive per GraphQL e API moderne
Il metodo QUERY trova un caso d'uso immediato in architetture come GraphQL. Attualmente, la maggior parte dei server GraphQL utilizza POST per tutte le operazioni di query e mutazione per evitare i limiti degli URI. L'adozione di QUERY permetterebbe di separare nettamente le operazioni di sola lettura (QUERY) da quelle che modificano i dati (MUTATION), migliorando la visibilità del traffico e permettendo un caching più granulare a livello di rete, senza dover implementare complessi layer di persistenza lato client.

Ancora nessun commento. Puoi essere il primo!