Uno scenario è quando si sta creando un endpoint di ricerca. Nell'esempio seguente, voglio cercare un database di aziende e le query possono diventare complicate; abbastanza dove voglio avere i parametri passati come oggetti JSON invece di un elenco semplice.
var hapi = require('hapi');
var joi = require('joi');
var server = new hapi.Server();
server.connection({port: 5555});
var simpleRoute = {
    method: 'GET',
    path: '/company/search',
    config: {
        validate: {
            query: {
                company: joi.object().keys({
                    name: joi.string(),
                    address: joi.string()
                })
            }
        }
    },
    handler: (request, reply) => {
        reply({
            input: request.query,
            results: 'SOME RESULTS'
        });
    }
};
server.route(simpleRoute);
server.start(() => {
    console.log('server started -- ' + server.info.uri);
});
 E l'url per questo assomiglia a   http://localhost:5555/company/search?company=%7B%22name%22%3A%22Cuthbert%22%2C%22address%22%3A%22123%20Main%20St%22%7D   . 
L'url è disordinato e non ha un bell'aspetto e per un sito Web rivolto al cliente, può essere difficile per un utente ricreare se desidera ripetere una ricerca.
C'è anche il limite di caratteri sugli url. È improbabile che lo colpisca, ma cosa succede se una query diventa troppo complessa per una richiesta GET? Posso modificare il percorso su POST / PUT, ma la ricerca non modifica anche alcun dato sul mio server.
Quindi, come faccio a passare oggetti complessi su http continuando a utilizzare correttamente GET, PUT, POST, ecc.?