、一方のエンティティが別の関係を持って、私は巣のRESTリソースこうして:のREST APIの設計が、一般的な状況では一般的な関係を持つ
POST /user/{userId}/accounts
そして、それはからのエンティティのためokです同じドメイン。しかし、異なるドメインのエンティティには意味をなさない。たとえば、バス回線(@Entity Line
)とオペレータ(@Entity Operator
)があります。私は新しいバスラインを作成する必要がある場合、私はオペレータに合格しなければならないので、
@ManyToOne
@JoinColumn(name = "operator_id")
private Operator operator;
:すべての行は、オペレータがあります。
new演算子で行を作成する必要がある場合は問題ありませんが、演算子を参照するだけの場合は、何とかoperator_idを渡す必要があります。これを処理する方法をいくつかのアイデア:
1.ネストラインをオペレータに
POST /operators/{operatorId}/lines {name: "15B", type: "BUS"}
それは技術的な観点からOKですが、ラインがないので、私は、事業者と分離ラインを維持したいです実際にはオペレータに「属し」ます(ネスティング)。
2.パスoperatorId直接
POST /lines {name: "15B", type: "BUS", operator: 12}
この事でいくつかの問題があります。そこで私は、new演算子を使用して新しい行を作成したい場合場合は、で、クエリは次のようになります。
POST /lines {name: "15B", type: "BUS", operator: {name: "SuperBUS"}}
そして、私は両方の状況に対処する必要があります。これにより、追加のエンティティ(オリジナルのものはOperator operator
で、int operator
ではありません)と "magic"ロジックが表示され、新しいオペレータまたは古いオペレータでラインを作成するかどうかを決定します。
このような状況を処理するためのベストプラクティスはありますか?いくつかの実装の詳細にカップルの周り同上のクライアントを渡すのIds
を渡す
:ここ
関連以外の関係は(オペレータが行を所有していない)が存在しない場合は、演算子を作成し、次のIDのいくつかの種類を使用して、それを参照する必要があり、技術的に2つのHTTP要求が発生します。 [DDD:aggregates](http://thepaulrayner.com/blog/aggregates-and-entities-in-domain-driven-design/)を参照してください。 – cdelmas
良い点。私はこれに焦点を当ててワン・コール・オペレーションであり、明白な解決策を見逃していました。 – ovnia