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
SELECT
consultas 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.department
no 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
userName
do resultado /projects/{userName}?fields=name&query=state==ACTIVE