1

次のような URL があるとします。

POST /departmentsは新しい部門
POST /employees作成し、 は新しい従業員を作成します。

どちらの URL も、新しく作成されたリソースなどのロケーション ヘッダーを返します。

従業員が複数の部門に所属できるとします。

対応する URL をどのように構成しますか?最も重要なのは、この操作を実行するために POST と PUT のどちらを使用するかです。例: Bill を本部門に追加するには、次のようにします。

POST /departments/Books/employees/Bill

または:

PUT /departments/Books
{
  "employee" : "Bill"
}

前者の方が意味的に正しいように見えます。なぜなら、とにかくPOST体には、この新しい関係を特徴付けるより多くのデータがあるからです。さらに

GET /employee/Bill以下によって返されるものとは異なる本体を返します。
GET /departments/Books/employees/Bill

したがって、関係を追加することは、新しいリソースを作成するようなものです。
POST /departments/Books/employees/Billただし、URL で新しいリソースに明示的に名前を付けているという事実は好きではありません。

4

3 に答える 3

1

事前に従業員の名前を知っていると仮定すると、これを行う最も簡単な方法は PUT を使用することです

PUT /departments/books/employees/bill

リソース "Bill" が完全に新しい場合は 201 を返します。"Bill" が既に存在する場合は 200 を返します。

GET /departments/books/employees/bill

GET /dapartments/giftcards/employees/bill

GET /employees/bill

は同じデータを返す必要があります。どちらの場合も「ビル」が同じリソースである場合、なぜそうならないのかわかりません。

于 2013-11-07T09:40:13.467 に答える
0

あなたの質問に対する唯一の答えはありません。「A / B」を含むURIがある場合のAとBの関係は、開発者(AFAIK)に任されています。

ただし、URI は最小の驚きの原則に従うべきであり、意味の数は限られていると思います。

私にとって、A/Bは次の3 つの可能な関係のみを表すことができます。

  1. "B は概念 A のインスタンスです";
  2. 「B は、インスタンス Aの一部である概念です」;
  3. 「Aは概念、Bは概念、BはAの一種」。

あなたの質問は、ケース 2 の使用に関するものです。ケース 2 は、「の一部である」関係にのみ使用することをお勧めします。

この論理を適用してあなたの質問に答えると、従業員は特定の部門の一員ですか?

確かにそうではありません。従業員は複数の部門で働くことができると書いているからです。「従業員」と「部門」の間の関係は「働く」関係であり、それは組合であり、構成ではありません。このため、次の使用は推奨しません。

/departments/Books/employees/Bill

内の明示的なリンクだと思います:

/departments/Books

リソース、次を指す:

/employees/Bill

リソースはより明確になり、長期的には誤解を招きにくくなる可能性があります。

于 2013-11-07T13:29:05.267 に答える