Digamos que tengo una descripción legible por máquina (como en WADL , Swagger o RAML ) de una API REST que proporciona interfaz a una base de datos.
Mis usuarios envían consultas sobre la base de datos subyacente en forma de SQL o lenguaje de consulta similar. Sin embargo, no puedo acceder a la base de datos directamente, solo a través de la API REST.
¿Qué enfoque elegiría para construir (preferiblemente semiautomáticamente a partir de la descripción) un sistema que traduzca dichas consultas SQL en una secuencia de solicitudes a la API REST dada?
¿Cómo representaría usted ese problema? ¿Existen algoritmos, marcos teóricos o herramientas que puedan ayudar?
La API REST admite:
- operaciones de solo lectura, es decir, solo
SELECT
consultas SQL - Proyecciones parciales XP (p
/persons?fields=firstname,lastname
. Ej. ) - Restricciones de RSQL (
/persons?query=firstname==John;department.code==42
ver otros ejemplos ).
Algunas referencias entre tablas (claves foráneas) se representan como atributos en la API REST (como Person.department
en el ejemplo de restricciones anterior), pero algunas referencias se representan como subrecursos (por ejemplo /persons/{userName}/projects
). Esto significa que algunas consultas requieren diseñar "un plan" para ser respondido en términos de solicitudes REST.
Por ejemplo: la consulta de "nombres de proyectos activos de Chuck Norris" se traduciría en:
/persons?query=firstname==Chuck;lastname==Norris
- Obtener
userName
del resultado /projects/{userName}?fields=name&query=state==ACTIVE