そのようなシステムが存在し、私はそれらの1つの作者です。これはPiqi-RPCと呼ばれ、HTTPを介したRPCスタイルのAPIの入力パラメーターと出力パラメーターのIDLベースの検証を行います。
HTTP POSTリクエストの入力と出力のデータ表現形式として、JSON、XML、およびGoogleプロトコルバッファをサポートします。クライアントは、3つの形式のいずれかを使用することを選択し、標準ヘッダーAccept
とContent-Type
HTTPヘッダーを使用して選択を指定できます。
ですから、そうです、理論的には、あなたは正しい方向を見ています。ただし、現時点では、Piqi-RPCはErlangでのみサーバーの書き込みをサポートしており、別のスタックを使用する場合はあまり役に立ちません。ApacheThriftはJSONoverHTTPトランスポートもサポートしていると聞きましたが、確認していません。私が知っている別の種類の同様のシステム(Erlangの場合も)はUBFと呼ばれます。Protocol Buffers仕様に基づいてJSONを解析および検証できるJava用のライブラリについて聞いたことがあります(例:http ://code.google.com/p/protostuff/ )。
アイデア自体は決して新しいものではありませんが、実際にそれにアプローチするシステムは多くありません。それは挑戦的な問題です。
歴史的に、IDLはインターフェイス定義とバイナリデータのシリアル化に使用されていましたが、後で登場した動的データ交換形式(XMLやJSONなど)の検証にはあまり使用されていませんでした。Sun-RPCIDLとCORBAIDLは最初のカテゴリに分類されます。WSDLは両方の領域をカバーする数少ない例の1つですが、それはひどいテクノロジーであり、ほとんどの最新のシステムにとっては悪い選択です。さらに、多くのスキーマ言語(DDLとも呼ばれます-データ定義言語)があり、そのほとんどは高度に専門化されており、XMLやJSONスキーマなどの1つの表現形式でのみ機能します。それらのいくつかは安定した実装を持っています。
Piqiプロジェクトとそれに基づくPiqi-RPCは、いくつかの非常に単純な実現を中心に構築されています。
DLLは、特定のデータ表現形式に明示的に関連付けたり、それを中心に構築したりする必要はありません。代わりに、そのような言語はかなり普遍的であり、幅広い実用的なユースケース(言語間のデータシリアル化やデータ検証など)とデータ形式(JSON、XML、プロトコルバッファなど)をカバーできます。
RPCスタイルの通信用のIDLは、ユニバーサルDDLの上に、ほとんど構文上の薄いレイヤーとして実装できます。
このようなIDLおよびインターフェイスの仕様は、トランスポートに依存しない場合があります。
HTTPを介したRPCスタイルのAPIと比較したHTTPを介したRESTスタイルのAPIと言えば。
RPCスタイルのAPIを使用する場合、サービス開発者または自動システムは、関数名(サービスの命名スキームによる)、入力、および必要に応じて出力の3つを検証する必要があります。
RESTスタイルのAPIの場合、人々は正当な理由もなく問題を抱えています。今では、検証するものがたくさんあります。URLセグメントにエンコードされた動的パラメーター(すべてのHTTPメソッドの場合)やURLクエリ文字列(HTTP GETメソッドの場合のみ)、HTTPメソッドの対応(GETにする必要があるかどうか)など、任意に複雑なURL構文です。 、POST、PUT、DELETEなど)、一部のパラメーターがそこにある場合のHTTP本文(JSONおよびXMLで表されるパラメーターに対して手動で2回実行する場合もあります)、カスタムHTTPヘッダー、および個別に-サービスドキュメント。それらすべてをサポートするIDLを想像してみてください!