機械で読み取り可能な説明があるとします( [〜#〜] wadl [〜#〜] 、 Swagger または [〜#〜]など) raml [〜#〜] )RESTデータベースのインターフェースを提供するAPI。
ユーザーは、基になるデータベースに関するクエリをSQLまたは同様のクエリ言語の形式で送信します。ただし、REST APIを介してのみ、データベースに直接アクセスできません。
そのようなSQLクエリを特定のREST APIへのリクエストのシーケンスに変換するシステムを(できれば説明から半自動で)構築するには、どのアプローチを選択しますか?
そのような問題をどのように表現しますか?役立つアルゴリズム、理論的フレームワーク、またはツールはありますか?
REST APIは以下をサポートします:
SELECT
SQLクエリのみ/persons?fields=firstname,lastname
)/persons?query=firstname==John;department.code==42
、参照 他の例 )。テーブル間の一部の参照(外部キー)は、REST API(上記の制約の例ではPerson.department
など)で属性として表されますが、一部の参照はサブリソース(例/persons/{userName}/projects
)これは、一部のクエリでは、RESTリクエストの観点から答えられるように「計画」を考案する必要があることを意味します。
例:「Chuck Norrisのアクティブなプロジェクトの名前」のクエリは、次のように変換されます。
/persons?query=firstname==Chuck;lastname==Norris
userName
を取得/projects/{userName}?fields=name&query=state==ACTIVE
技術的には、クエリ言語はRESTサービスが理解する必要のあるもう1つの標準です。クエリパラメータにマップする必要はありません。たとえば、Hydraによって、たとえば次を含む単一のクエリパラメータを定義できます。 SQL。必要なのは、SQLを記述できる語彙と、SQLを構築できるクライアントとSQLを理解できるサーバーだけです。一般的な語彙は、この場合のクライアントとサーバー間の契約です いくつかこれについて話します。 独自のクエリ言語を作成する必要はなく、既存のクエリ言語を再利用できます...
WADLと他のREST説明言語は不適切なスタートです。これは、RESTに niform interface /HATEOAS制約があるため、クライアントが状態を変更するには、ハイパーリンクを使用する必要があります。クライアントは、セマンティクスをチェックして、選択するハイパーリンクを決定する必要があります。リンクメタデータ(リンク関係など)には、そのセマンティクスが含まれています... WADLなどの言語では、リンクはありません。リンクメタデータ、またはセマンティクス、およびRESTクライアントは、RESTサービスから分離されていないため、再利用できません。:S