Sto progettando un'API in grado di fornire agli sviluppatori un accesso di sola lettura a un set di dati di grandi dimensioni. I dati sono memorizzati in un database mongodb.
Tutti i risultati dell'API saranno fondamentalmente un conteggio delle corrispondenze a un determinato filtro di query o la restituzione delle righe effettive corrispondenti al filtro di query.
Se possibile, non voglio limitare il modo in cui gli sviluppatori possono cercare in questo set di dati, poiché senza dubbio verranno creati rapporti / usi nei dati a cui non ho pensato.
Mi sembra che questo potrebbe essere ottenuto usando la sintassi dell'oggetto query di mongodb come uno dei parametri di query, ad es. un oggetto JSON come segue:
{ team: { $eq: 'Crystal Palace' }, goals: { $gte: 2 } }
che specifica che le partite in cui Crystal Palace ha segnato 2 o più goal.
Quindi l'utente api farebbe una richiesta POST, che ha un oggetto JSON come corpo, parte della quale è l'oggetto query sopra che posso validare e quindi usare direttamente in una query:
Pro
- Gli utenti dei dati possono fare qualsiasi query desiderano. Penso che se avessi usato le richieste, allora l'espressione di query complesse sarebbe diventata piuttosto complicata.
- Penso che in questo caso particolare, posso ridurre i tempi di sviluppo per tutte le possibili chiamate api, perché in realtà c'è solo una rotta. Devo solo implementare la convalida sull'oggetto query. Ho ancora il controllo sull'esecuzione della query o meno e sui campi che l'API restituirà.
Contro
- Mi chiedo se ci sono problemi di sicurezza? Come accennato in precedenza, l'utente non sarà in grado di specificare i campi che vengono restituiti e sarà in grado di interrogare la raccolta 1 in sola lettura, quindi non credo che ci sarà un problema.
- Penso che molti sviluppatori saranno abituati a ottenere più percorsi con diversi parametri uri, quindi l'uso di questo metodo costringe gli utenti ad imparare la sintassi di mongodb. Inoltre, non solo ho intenzione di documentare molto bene l'API, ma lo sviluppatore potrebbe anche ricorrere ai documenti di mongodb se rimangono bloccati.