3

これは、私が取り組んでいる Web API プロジェクトに固有の設計上の問題ですが、REST 原則の一般的な問題かもしれません。私がこれを完全に考えすぎている可能性もあります。

別のクラスの子コレクションを持つ Entity Framework のクラスがあります。

public abstract class Tracker
{
    [Key]
    public int ID { get; set; }

    [MaxLength(50)]
    public string Name { get; set; }

    public virtual ICollection<Unit> Units { get; set; }      
}

Unit クラスは次のようになります。

public class Unit
{
    [Key]
    public int ID { get; set; }

    [MaxLength(50)]
    public string Name { get; set; }
}

私は、トラッカーのリストを取得し、使用可能なユニットのリストを取得してから、トラッカーのユニットのリストに特定のユニットを追加する Web API に取り組んでいます。トラッカーとユニットには独自の API コントローラーとリポジトリーがあり、この関連付けの作成をサポートするためにそれらを変更する方法と、リクエストがどのようになるかを理解しようとしています。

PUT を介してトラッカー エンドポイント (/Trackers/1) を更新し、既存のユニットと一緒に新しいユニットをリストに追加することは適切ですか? バックエンドでそれをどのように処理しますか?私が PUT アプローチで抱えている精神的なハードルの 1 つは、リクエスト ボディ コレクション プロパティに子オブジェクト全体を含めるかどうかです。意味がありませんが、そうでなければどのように機能するかわかりません。(私の場合) 仮定は、トラッカー リストに追加されるユニットが既に存在するものであり、関連付けを作成しているだけだということです。これらの両方に DTO を使用して、これをより簡単に達成し、それに応じてマップする必要がありますか?

または、「TrackerUnit」のような新しい共同 DTO を作成し、そのエンドポイント (POST /TrackerUnits) に POST することで新しい関連付けを追加できる対応するエンドポイントを作成し、新しいコントローラーで処理を処理する方が理にかなっていますか? アイテムを削除するには、DELETE もサポートする必要があると思います。このエンドポイントはシステム内の実際のリソースに対応しないため、このアプローチに夢中ではありませんが、これらの関連付けをマッピングするためにのみ使用されます。

4

1 に答える 1

5

エンドポイントを作成するのはどうですか:

/Trackers/{id}/units

次に、ユニットをこのエンドポイントに投稿して、{id} で識別されるトラッカーに関連付けることができます。または同様に:

DELETE /Trackers/{id}/Units/{unitid}

ユニットを削除します。

于 2013-04-26T08:09:48.737 に答える