私はここで多くの議論を読んで、Jon Moore's presentation(これはたくさん説明しました、btw)を見て、Roy FieldingのHATEOASのブログ記事を読んでいますが、依然としてクライアントになると少し暗いです設計。HATEOASクライアントデザイン
API質問
今のところ、私は単にリソースを表すために、フォーム/アンカーと定義リストにXHTMLを返しますよ。次のスニペットは、フォーム/アンカー/リストのレイアウトの詳細です。
# anchors
<li class='docs_url/#resourcename'>
<a rel='self' href='resource location'></a>
</li>
# forms
<form action='action_url' method='whatever_method' class='???'></form>
# lists
<dl class='docs_url/#resourcename'>
<dt>property</dt>
<dd>value</dd>
</dl>
私の質問は主にフォームです。 Jonの講演では、(add_location_form)などのフォームタイプとそれに必要な入力を文書化しています。私は多くのリソースを持っていませんが、抽象的なフォームタイプ(追加、削除、更新など)を考えていて、ターゲットリソースの有効な表現を送信する必要がある(追加、更新)あなたは識別子を送信する必要があります削除と。
質問1:HATEOASの概念とは、私たちは本当にだけで、クライアントは、ちょうどすべてのデータを送り返す(それらを追加、削除、更新などのクラス分けで)フォームを「発見」させるべきではありません、我々彼らに与えた?ここでの私の本当の疑問は(議論ではない)これは良い習慣に従うのでしょうか?
クライアントの質問この効果のクライアントコード(APIの消費者)とそのUIを行う方法を発見-ことができるというリソースに対する私たちの行動とHATEOAS、後
。これらのプリンシパルに従うと、UIは利用可能なアクションのみを表示すべきですが、その実装方法は素晴らしいと思います。
私の現在のアプローチは、クライアントの開発時に知られているアクション(フォームクラス、つまりadd、delete、update)を知り、uiコントロールがあればそれを表示するためにxmlとxpathとしてレスポンスを解析しています利用可能です。
質問2:私の発見方法は間違っていますか?それとも、クライアントが心配する限り(フォームクラスを知っているか)これはあまりにも魔法ですか?これは、クライアントがそれぞれのリソースで利用可能なアクションを知っていることを前提としていないでしょうか(それは、クライアントを作成する理由のようなものかもしれません)、リソースへのアクション(フォームクラス)フォームクラスを文書化し、クライアント(およびクライアント開発者)がそれらを調査して発見できるようにしますか?
私はこれでどこにいても知っていますが、どんな洞察も高く評価されます。私はこれらの2つの質問のいずれかによく答える回答に答えてマークします。ありがとう!
完璧!したがって、フォームのさまざまな「クラス」を文書化し、ドメインに応じて利用可能な場所に公開し、クライアントが「既知の」フォームを探すことを許可するアプローチは、フォームを使用するのではなくフォームを使用する限り可能です。これは素晴らしい。幸いにも、当分の間、私はクライアントとAPIの両方を作成しています。 – jowee
サーバーのリソースにマップするクライアントコード内のオブジェクトを作成するのがよい方法ですか?私は、クライアントがフォームフィールドを「記入する」能力をより簡単に理解できるようになるので、そうすると思います。またはこれはあまりにも多くの複製(すなわちDRY)ですか?私は実際には2つの全く異なるアプリケーション(API、クライアント)について話しているので、この意味ではうまくいくと思うので、DRYは適用されません。 – jowee
さて、このトリックは、サーバーが実際に尋ねることに書いて、あなたが思うものではなく、あなたにするように指示します。あなたが想定しているほど、システムはより壊れやすく、変化するのに耐えるようになります。しかし、柔軟性はコーディングとコードの複雑さを犠牲にしているため、ほとんどの人は気にしません。 –