データベースへのインターフェースを提供するREST APIの機械で読み取り可能な記述(WADL、Swagger、RAMLなど)があるとします。
私のユーザーは、基になるデータベースに関するクエリをSQLまたは同様のクエリ言語の形式で送信します。ただし、REST APIを介してのみ、データベースに直接アクセスすることはできません。
そのようなSQLクエリを特定のREST APIへの一連のリクエストに変換するシステムを(できれば記述から半自動で)構築するには、どのアプローチを選択しますか?
そのような問題をどのように表現しますか?役立つアルゴリズム、理論的フレームワーク、またはツールはありますか?
REST APIは以下をサポートします。
- 読み取り専用操作、つまり
SELECT
SQLクエリのみ - XPartialプロジェクション(例
/persons?fields=firstname,lastname
) - RSQL制約(別の例を
/persons?query=firstname==John;department.code==42
参照)。
テーブル間の一部の参照(外部キー)はREST APIでは属性として表されますが(Person.department
上記の制約の例など)、一部の参照はサブリソース(例:)として表されます/persons/{userName}/projects
。つまり、一部のクエリでは、RESTリクエストに関して回答される「計画」を考案する必要があります。
例:「チャックノリスのアクティブなプロジェクトの名前」のクエリは、次のように変換されます。
/persons?query=firstname==Chuck;lastname==Norris
userName
結果から得る/projects/{userName}?fields=name&query=state==ACTIVE