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:
-
/persons?query=firstname==Chuck;lastname==Norris
- Ottieni
userName
dal risultato -
/projects/{userName}?fields=name&query=state==ACTIVE