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.?