Come astrarre l'accesso ai DB e tuttavia supportare il filtro flessibile?

1

Ho bisogno di implementare API REST che supportino un filtraggio complesso, quindi l'utente sarebbe in grado di effettuare tali richieste:

Products?$filter=Price le 3.5 or Price gt 200

Il server API utilizzerà un'architettura a livelli e avrà un livello, che consentirà l'accesso astratto al database.

Ed ecco il problema: da un lato ho bisogno di implementare un filtro flessibile e dall'altra un accesso astratto al database.

Mi chiedo - ci sono soluzioni comprovate per questo?

    
posta Gill Bates 31.07.2016 - 22:28
fonte

2 risposte

3

Non vedo alcuna contraddizione tra l'astrazione del database e il filtraggio complesso.

Mentre si dispone di un'astrazione del livello del database, è ancora possibile, con interfacce ben definite, stabilizzare il filtraggio complesso.

D'altra parte l'astrazione del database non significa che non ci sarà un livello che finirà per occuparsi direttamente del database e creare query.

Il mio suggerimento è quello di stabilire un insieme di metodi nella tua API che copre il 20% dei casi che rappresenteranno l'80% dell'utilizzo effettivo:

Products?PriceRange=3.5,4.5
Products?PriceLower=3.5
Products?PriceHigher=3.5
Products?DescriptionContains=nuts

E combinali:

Products?PriceRange=3.5,4.5&DescriptionContains=nuts&Category=CANDY
risposta data 01.08.2016 - 17:39
fonte
1

Puoi:

  1. Costruisci un oggetto Query, che viene passato e alla fine ottiene
    convertito in SQL dinamico nel livello dati, ad esempio nei framework come Entity Framework.
  2. Oppure puoi avere domande fisse che sono abbastanza complesse da consentire per passare i vari filtri necessari.
  3. Oppure puoi avere query fisse che fanno la maggior parte del lavoro, aumentata da un livello di codice che rimuove i bit aggiuntivi.

Il problema con 1 è che database diversi adottano approcci diversi alla loro struttura di query. Si 'astratta' creando interfacce ecc. E poi si scopre che la struttura di tale astrazione non si adatta bene con un altro DB.

Inoltre, parte dello scopo di astrarre il datalayer è quello di consentire alle varie query di essere ottimizzate per le prestazioni. Quando l'utente può inviare qualsiasi richiesta, può anche inviare quelle lente.

    
risposta data 01.08.2016 - 11:11
fonte

Leggi altre domande sui tag