HATEOASを使用してRESTサービスを発見するための戦略はありますか?


10

HATEOAS制約を使用してRESTサービスを構築する場合、リンクを介してリソースの存在を宣伝するのは非常に簡単です。あなたGETは私のサイトのルートにa を作成し、私はすべての第1層リソースをリストするルートドキュメントで応答します。

{
    users: { href: "/users" }
    questions { href: "/questions" }
}

これらのhref値の読み取り方法を理解しているクライアントは、これらの値に対してGET要求を実行し、アプリケーションで使用可能な現在のすべてのリソースを発見できます。

これは基本的なルックアップシナリオではうまく機能しますが、リソースがクエリ可能かどうかは示しません。たとえば、次のことを実行するのが妥当な場合があります。

GET /users?surname=Smith

リソースの事前の知識がなくても、クライアントが一貫したクエリを形成できる十分な情報でこのクエリ機能を表現できる形式はありますか?

さらに、クライアントがPOST期待された場所で特定の場所への実行を許可されていることを表現する方法はありますか。たとえば、クライアントが新しい質問リソースを作成するために以下を実行することが期待できます。

POST /questions

{
    title: "Are there strategies for discovering REST services using HATEOAS?",
    body: "When building a REST service with the HATEOAS constraint, it's very..."
}

人間が使用する形式としてHTMLを使用する場合、フォームとプロンプトを使用してこれを多く表現し、サービスで実行できる操作を人間が発見できるようにすることができます。

クライアントにとって同様のことができるフォーマットはありますか?


2
RESTサービスの検出に関する問題について、ここで説明および回答しています:stackoverflow.com/questions/9101494/…最も簡単な解決策は、使用できるメソッドだけでなく、フォーム要素(入力、選択など)を介して送信されるオブジェクト構造。クライアントは、必要なものを見つけるためにXMLパーサーを持っているだけで済みます。もう1つの方法は、URLテンプレートを使用する方法ですが、クエリ文字列を受け取るリソースでのみ役立ちます。
スポーク2013

コンテンツタイプについて。これは、HTTPヘッダーで行われるコンテンツネゴシエーションで解決されます。サーバーが要求されたコンテンツタイプを提供できない場合、サーバーは返すことができるコンテンツタイプを示すHTTPエラー(300や406など)を返す必要があります。
スポーク2013

回答:


1

どのような入力が受け入れられるかをどのようにして知っていますか?つまり、クライアントに事前の知識がない場合、「姓」のセマンティクスをどのように定義しますか?あなたはOWLのような何かを必要とする領域に入り始めています。

クライアントがよく知られたMIMEタイプのセマンティクスを理解することを期待する方が現実的だと思います。たとえば、「text / vcard」と言ってください。


コンテンツタイプを使用する方法だと思います。使用するアプリケーションを簡単に変更して、application/atomapp+xmlこの形式をすでに理解しているすべてのクライアントが使用できるようにすることができました。これを実用的なソリューションにするのに十分な数の有名なコンテンツタイプがそこにあると思われます。
ポールターナー

@Spoikeのコメントは、問題の残りの半分に対するREST風のエレガントなアプローチだと思います。クライアントが(たとえば)ユーザーがvCardとして表されていることを知っている場合でも、ユーザーのプロパティのどのサブセットが検索に利用できるかを知る必要があります。
スティーブンJ.アンダーソン

4

「WADL」を通じてサービスの詳細を公開できます

http://en.wikipedia.org/wiki/Web_Application_Description_Language

これはオプションであり、すべてのバックエンドRESTテクノがこれをサポートしているわけではありません。たとえば、jax-rsの「公式」Java実装であるJerseyは、それをサポートしています。たとえば、自動で生成できます。

それが使われるのを見るのは、しかし、非常にまれです。

私はそれを使っている大きなものを知りません。一般に、APIを説明するWebページがあります。


1
CXFはWADLをサポートするもう1つの大きなJava JAX-RS実装であり、興味深いサードパーティのWADLコンシューマもいくつか見始めています。
ドナルフェロー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.