1

REST のリンクをどこまで使用できるかについて、ずっと疑問に思っていました。著者がいる本を考えてみましょう。しかし、本と著者の間には明らかに多対多の関係があります (本は複数の著者によって書かれ、著者は複数の本を書くことができます)。

http://server/book/21では、著者に関する情報を含む書籍の XML を返すrest callがあるとします。本はリソースであり、著者はリソースであるため、XML にすべての著者情報を直接含める必要はありません。著者情報へのリンクが含まれている必要があります。しかし、以下の 2 つの例のうち、より広く受け入れられているのはどれですか?

(私のくだらないフォーマットの XML ですみません。私は XML を手書きする経験があまりありません)

<book>
  <title>Some Book</title>
  <authors>
    <author link="http://server/author/82">Some Guy</author>
    <author link="http://server/author/51">Some Other Guy</author>
  </authors>
</book>

次に、作成者リンクは詳細情報を返します。

<author>
  <name>Some Guy</name>
  <dateOfBirth>some time</dateOfBirth>
</author>

または:

<book>
  <title>Some Book</title>
  <authors>http://server/book/21/authors</authors>
</book>

戻りhttp://server/book/21/authors値:

<authors>
  <author link="http://server/author/82">Some Guy</author>
  <author link="http://server/author/51">Some Other Guy</author>
</authors>

そして、それらのそれぞれが<author>再び前の例を返します。

私が質問している理由は、基本的に、私の仕事では 2 番目のアプローチを採用したためであり、クライアントが行きたい場所に到達するには、さらに多くの手順を実行する必要があるように思われます。また、「必ず必要になる」基本情報 (作成者名) については、もう 1 つの手順を実行する必要があります。一方、この方法では、bookリソースは書籍に関する情報のみを返し (他には何も返さない)、それ以外のものを取得するには、他のリソースにアクセスする必要があります。

4

2 に答える 2

1

この質問は、「あなたの好みは何ですか」タイプの質問のように聞こえます。だからここに私の2セントがあります:

元のxmlに著者名を含めるのが最善のアイデアだと思います。これにより、クライアント アプリケーションは、2 回目のレスト リクエストを必要とせずに、ホット リンク可能な作成者名のリストを表示できます。book リソースが表示されている場合は、ほとんどの場合、著者名が常に表示されます。もし私があなただったら、残りのリソースの「理論上の」正しさを心配するよりも、実用性にもっと集中するでしょう。それが理にかなっているなら。

作成者のすべての情報を元の xml リソースに含める必要はありません。むしろ、本のリソースを表示し、必要に応じて著者に関する詳細情報を見つけるのに実用的なものです。

于 2012-09-17T21:26:00.697 に答える
0

それが一貫して行われている限り....

どちらでも問題ないように思えるかもしれませんが、実際には 2 番目のアプローチの方が柔軟性が高く、将来の API の成長に一貫した方法で対応できます。これは、さまざまなオブジェクトとメイン オブジェクトのリレーションが多数存在する可能性があるためです。さまざまなオブジェクトへの大量のリンクを含む単一のオブジェクトを取得することは、対処するのが面倒な場合があります。また、返されるオブジェクトのサイズを、関連する他のさまざまなオブジェクトではなく、コアの「本」情報のみに制限します。リソースごとに最小限の有用なコンポーネントを使用してください。少なくとも、実際には使用されていないリレーションのバックエンドと不要な負荷を減らします。

確かに、この例では、オブジェクトの関係情報を制限することの重要性を理解するのは困難です。ほとんどの本にはせいぜい数人の著者しかいないためです。しかし、REST を介して公開するすべてのオブジェクトに当てはまりますか? これが「書店」で、関係が「顧客」であると想像してみてください。店舗の住所と電話番号だけが必要な場合、顧客の完全なリストを取得してオブジェクトの一部にする必要があるのは、すべての関係者にとって非常に無駄ではないでしょうか? この新しいケースでは例外を作成し、顧客をリンクとして返さないようにしますが、店舗部門などの別のことでは顧客をリンクとして含めることにしますか? これで一貫性がなくなり、すべてのオブジェクトが同じパターンに適合しないため、顧客は各オブジェクトがどのように返されるかを知る必要があります。

2 つ目も、この同じアプローチが API 全体で普遍的に行われる場合、リレーショナル モデルをクリーンに保ちます。オブジェクトのリレーションには、次の方法でアクセスできます。

 http://server/object/<object_id>/<relationshipName>
于 2012-09-17T21:26:47.930 に答える