Un po 'di background. Siamo nella fase di progettazione di un'API HTTP e ci troviamo di fronte alla domanda su come definire query complesse in formato JSON. Nel nostro prodotto abbiamo un articolo che ha MOLTI campi e proprietà e un filtraggio appropriato è vitale sia per gli utenti che per l'interfaccia costruita sulla parte superiore delle API.
Attualmente eseguiamo il filtraggio con query SQL, ma poiché abbiamo bisogno di esporre alcune funzionalità tramite HTTP, dobbiamo trovare un'alternativa ragionevole. Abbiamo optato per l'idea di avere un% endpoint/search
nella nostra API, in cui vorremmo POST
un corpo JSON con la query.
Il dubbio che abbiamo è in realtà come strutturare la query in formato JSON. Ho cercato su Internet e non ho trovato nessun formato standard per le query, un po 'più complesso di un paio di condizioni.
Consideriamo la seguente query SQL composta:
SELECT code,
description
FROM TABLE
WHERE end_contract > sysdate
AND start_contract < sysdate
AND area NOT NULL
AND (supplier LIKE '%hey%'
OR (SIZE = 67
AND color = 'red'))
ORDER BY code;
Mi viene in mente qualcosa di simile, ma sembra un po 'goffo e abbastanza dettagliato.
{
"fields": [
"code",
"description"
],
"orderBy": "code",
"query": {
"condition": "and",
"clauses": [
{
"field": "end_contract",
"operator": ">",
"value": "currentDate"
},
{
"field": "start_contract",
"operator": "<",
"value": "currentDate"
},
{
"field": "area",
"operator": "not",
"value": null
},
{
"condition": "or",
"clauses": [
{
"field": "supplier",
"operator": "like",
"value": "*hey*"
},
{
"condition": "and",
"clauses": [
{
"field": "size",
"operator": "=",
"value": 67
},
{
"field": "color",
"operator": "=",
"value": "red"
}
]
}
]
}
]
}
}
Quale sarebbe un modo ordinato per definirlo in formato JSON? Ci sono standard formali o informali a cui possiamo ricorrere per definire le relazioni AND e OR (e i casi, idealmente)?
Cheers!