私は実用的なREST APIを設計していますが、既存のエンティティをコレクションに追加する最善の方法に少し立ち往生しています。私のドメインモデルには、サイトのコレクションを持つプロジェクトが含まれています。これは厳密な多対多の関係であり、関係を明示的にモデル化するエンティティ(ProjectSiteなど)を作成する必要はありません。
私のAPIにより、消費者は既存のサイトをプロジェクトに追加できます。ハングアップしているのは、本当に必要なデータはProjectIdとSiteIdだけだということです。私の最初のアイデアは:
1. POST myapi/projects/{projectId}/sites/{siteId}
しかし、私も考えました
2. POST myapi/projects/{projectId}/sites
JSONコンテンツとして送信されるSiteエンティティを使用します。
オプション1はシンプルで機能しますが、あまり適切ではないため、このパターンに従うことができない他の関係があるため、APIに矛盾が生じます。
オプション2は良い感じですが、2つの懸念につながります。
- 新しいサイトが投稿された場合(SiteId = 0)、サイトを作成するか、例外をスローする必要がありますか?
- 関係を作成するためにProjectIdとSiteIdのみが必要なため、他のプロパティのデータが間違っているか、欠落しているサイトが投稿される可能性があります。
3番目のオプションは、関係を作成および削除するためだけに単純なエンドポイントを提供することです。このエンドポイントでは、ProjectIdとSiteIdのみを含むJSONペイロードが必要です。
どう思いますか?