2つのトップレベルリソースFoo
とBar
があるとします。今度はFoo
をBar
の一部にリンクする必要があります。 Javaクラスでは、これは次のようになります。REST APIの設計:リンクするリソース
public class Foo {
Set<Bar> bars;
}
public class Bar { … }
私はこのような何かにFoo
のXML表現を形作るしたいと思います:
GET /foos/1
<foo>
…
<atom:link rel="self" href="/foos/1" />
<atom:link rel="bars" href="/foos/1/bars" />
</foo>
は、だから私はかなり割り当てられているすべてのBar
を公開ネストされたリソースとして〜Foo
つまり、Bar
リソースには個別のライフサイクル(構成の代わりに集約)があります。
GET /foos/1/bars
<bars>
<atom:link rel="bar" href="/foos/1/bars/1" />
<atom:link rel="bar" href="/foos/1/bars/2" />
</bars>
Alteratively私は<foo>
要素先行でコレクションをインライン化できます。ネストされたリソースは、このようなリンクされているすべてのBar
何かを公開する可能性があります。しかし、私はまだいくつかの疑問に悩まされています。これは要求をトリガすることによってFoo
からBar
をうまく取り除くことができます。 /foos/1/bars/1
ですが、Foo
にはどのようにしてBar
が割り当てられますか?クライアントと仮定すると取得/bars
にアクセスします。
GET /bars
<bars>
<bar>
…
<atom:link rel="self" href="/bars/4711" />
</bar>
</bars>
、それは/foo/1/bars
に/bars/1
を割り当てることを望んで決定します。私はPOST
の要求を/foo/1/bars
に考えていましたが、実際に何を提出するかは不明でした。 A link
要素がBar
リソースを指していますか?
POST /foos/1/bars
<atom:link href="/bars/4711" />
クライアントはまだURLを作成する必要はなく、依然としてREST制約を満たしているため、これは大丈夫です。しかし、それはサーバーへのPOST
へのリンクにちょっと変わっているように感じます。このシナリオにはよりよい解決策がありますか?
私は2つのリソース間の関係を確立するためのリンクを投稿することに躊躇しません。リソースを取得してPOSTすると自己記述的であると信じている人もいますが、それが必要であると私は確信していません。 –
それは私があなたがa)不必要なチャットを作り、b)実際にリンクを作成するために、サーバー側のrepesentation全体を実際に必要としないためです。 –