Definire sensibilmente una query complessa in JSON

2

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!

    
posta GalacticDessert 27.07.2018 - 08:59
fonte

2 risposte

2

Un'opzione potrebbe essere quella di supportare la tua app Open Data Protocol (OData). È uno standard basato su HTTP e REST. Viene utilizzato da servizi su larga scala come Ricerca di Azure.

link

Dovrebbe fornire praticamente tutto ciò che si vuole fare, e in un formato comune che rende l'integrazione con altri sistemi più semplice se necessario.

    
risposta data 27.07.2018 - 23:24
fonte
1

Sono sempre stato favorevole alla presentazione delle interfacce json to language e quindi all'uso di costrutti linguistici per selezionare i dati necessari. Nel tuo caso sembra che potrebbe avere problemi di sicurezza. Ma potresti usarlo per la prototipazione, e quindi eseguire l'hardcode delle query sul server man mano che l'interfaccia si risolve.

    
risposta data 27.07.2018 - 15:34
fonte

Leggi altre domande sui tag