4

parentデータセットを表すリソースがあるとします。このようなもののRESTfulURL構造は非常に単純なはずです。

  • GET / api/parents-すべての親のコレクションを返します
  • GET / api / parents / 1-id=1の親を返します
  • POST / api/parents-コレクションに新しい親を追加します
  • PUT / api / parents / 1-id=1の親のデータを更新します
  • DELETE / api / parents / 1-id=1の親を削除します

ここで、それぞれがリソースparentのコレクションで構成されているとしましょう。child子リソースIDはグローバルスコープまたはローカルスコープを持つと見なす必要がありますか?次の2つのURLが与えられていると思います。

  • GET / api / parents / 1/children-親1の子のコレクションを返します
  • POST / api / parents / 1/children-親1のコレクションに新しい子を追加します

しかし、GET、PUT、およびDELETEについてはどうでしょうか。次のうちどれが適切ですか?

  • GET、PUT、またはDELETE / api / parents / 44 / children / 6
  • GET、PUT、またはDELETE / api / parents / children / 6

childリソースのIDの一意性の範囲に帰着するようです。IDは親アグリゲート内でのみ一意ですか?それとも、それはすべての親のすべての子供たちの間でユニークですか?一方が他方よりも正しいですか、それとも問題のリソースのID一意性スコープに依存しますか?

例1が例2よりも適切であり、id=44の親にid=6の子がない場合(たとえば、子id=6がid=9の親に属している場合)、どのHTTP応答を返す必要がありますか?

4

3 に答える 3

3

@danludwig

URIが単なるリソース識別子であり、これらのユーザーフレンドリーな階層はすべて人間にとってのみ重要である限り、実際には重要ではないと思います...しかし、どちらの場合でも、これについて質問します "/ api / parents / children / 6 "、それを分解しましょう:

  • 「/api/ parents / children / 6」にアクセスすると、子リソースが提供されます
  • 「/api/ parents / children」にアクセスしてください。ここで何が起こりますか?404?
  • 「/api/parents」にアクセスするとすべての親が表示されます
  • うまくいけば、他の従属リソースへのリンクを含む「/ api」ホーム(またはインデックス)ドキュメントにアクセスします。

階層URIを構築するときの良いテストだと思います。各セグメントが特定のリソースにバインドされており、404を返さないことを確認してください。

于 2012-10-27T18:47:09.813 に答える
1

IDは親アグリゲート内でのみ一意ですか?それとも、それはすべての親のすべての子供たちの間でユニークですか?

これは、子供が唯一の親の子孫である可能性に依存します。この場合、ローカルスコープのIDが可能です。

一方、子が複数の親の子になる可能性がある場合は、グローバルスコープIDが必要になります。

もちろん、グローバルIDを持つ子が親の下にのみ存在できるかどうか、またはそのような子が親を含まないURLでアドレス指定できるかどうかを尋ねることができます。

于 2012-10-29T08:01:07.733 に答える
0

GET, PUT or DELETE /api/parents/44/children/6URLは、親リソースと子リソースの関係を示しているので、私には見えます。

唯一の問題は、子リソースを操作するために親IDを知る必要があることです。

別の方法は、URLの「親」部分をまとめて削除することです。GET, PUT or DELETE /api/children/6そして、親にURLを提供する子リソース内に「リンク」属性または要素を持ちます。

<child>
   <id>6</id>
   <link rel="parent" href="/api/parents/1" />
   ...
</child>
于 2012-10-27T19:17:31.383 に答える