Come convertire la query SQL in richieste API REST?

6

Diciamo che ho una descrizione leggibile dalla macchina (come in WADL , Swagger o RAML ) di un'API REST che fornisce un'interfaccia a un database.

I miei utenti inviano query sul database sottostante in forma di SQL o linguaggio di query simile. Tuttavia, non posso accedere direttamente al database, solo tramite l'API REST.

Quale approccio sceglieresti per costruire (preferibilmente semi-automaticamente dalla descrizione) un sistema che traduca tali query SQL in una sequenza di richieste a una data API REST?

Come rappresenti questo problema? Esistono algoritmi, quadri teorici o strumenti che possono aiutare?

L'API REST supporta:

  • operazioni di sola lettura, ovvero solo SELECT query SQL
  • XPartial proiezioni (ad esempio /persons?fields=firstname,lastname )
  • RSQL vincoli ( /persons?query=firstname==John;department.code==42 , vedi altri esempi ).

Alcuni riferimenti tra tabelle (chiavi esterne) sono rappresentati come attributi nell'API REST (come Person.department nell'esempio dei vincoli sopra), ma alcuni riferimenti sono rappresentati come subresource (ad esempio /persons/{userName}/projects ). Ciò significa che alcune query richiedono di escogitare "un piano" per rispondere in termini di richieste REST.

E.g .: Query per "nomi di progetti attivi di Chuck Norris" si tradurrebbe in:

  1. /persons?query=firstname==Chuck;lastname==Norris
  2. Ottieni userName dal risultato
  3. /projects/{userName}?fields=name&query=state==ACTIVE
posta Jakub Stejskal 14.03.2014 - 22:42
fonte

1 risposta

1

Tecnicamente il linguaggio di query è solo un altro standard che il servizio REST dovrebbe comprendere. Non è necessario mappare per interrogare i parametri. Ad esempio, da Hydra è possibile definire un singolo parametro param che contiene ad esempio un SQL. Tutto ciò di cui hai bisogno è un vocabolario in cui puoi descrivere SQL e un client che può creare SQL e un server in grado di comprendere SQL. Il vocabolario comune è il contratto tra il client e il server in questo caso. Alcuni parlano di questo. Quindi non devi creare una tua query lingua, puoi riutilizzare qualsiasi linguaggio di query esistente ...

WADL e altre lingue di descrizione REST sono un brutto inizio, perché REST ha una uniforme interfaccia / HATEOAS che afferma che i client devono utilizzare i collegamenti ipertestuali per modificare il loro stato. I clienti dovrebbero decidere quale collegamento ipertestuale scegliere selezionando la loro semantica. I metadati di collegamento (ad esempio la relazione di collegamento) contengono quella semantica ... Per le lingue come WADL non ci sono collegamenti, metadati di collegamento o semantica, e quindi il client REST non può essere riutilizzato, poiché non è disaccoppiato dal servizio REST. : S

    
risposta data 18.09.2014 - 15:24
fonte

Leggi altre domande sui tag