Digamos que eu tenha uma descrição legível por máquina (como WADL , Swagger ou RAML ) de uma API REST que fornece interface para um banco de dados.
Meus usuários enviam consultas sobre o banco de dados subjacente na forma de SQL ou linguagem de consulta semelhante. No entanto, não consigo acessar o banco de dados diretamente, apenas através da API REST.
Que abordagem você escolheria para criar (de preferência semi-automaticamente a partir da descrição) um sistema que traduz essas consultas SQL em uma sequência de solicitações para a API REST fornecida?
Como você representaria esse problema? Existem algoritmos, marcos teóricos ou ferramentas que podem ajudar?
A API REST suporta:
- operações somente leitura, ou seja, apenas
SELECTconsultas SQL - Projeções XPartial (por exemplo
/persons?fields=firstname,lastname) - Restrições RSQL (
/persons?query=firstname==John;department.code==42, veja outros exemplos ).
Algumas referências entre tabelas (chaves estrangeiras) são representadas como atributos na API REST (como Person.departmentno exemplo de restrições acima), mas algumas referências são representadas como sub-fonte (por exemplo /persons/{userName}/projects). Isso significa que algumas consultas requerem a criação de "um plano" para ser respondido em termos de solicitações REST.
Por exemplo: a consulta para "nomes de projetos ativos de Chuck Norris" seria traduzida para:
/persons?query=firstname==Chuck;lastname==Norris- Obter
userNamedo resultado /projects/{userName}?fields=name&query=state==ACTIVE