私は旅行計画アプリケーションを持っていて、各旅行は一連のポイントとして構成された「経路」リソース(例えば、駆動されるルートを表す)で構成されているとします。次のようなリクエストを使用してこれらのリソースをCRUDできます。どのようにしてRESTfulで作成して同時に削除しますか?
POST /trips/1234/paths
<Path>
<Point>32,32</Point>
<Point>32,34</Point>
<Point>34,34</Point>
</Path>
DELETE /trips/1234/paths/3
ここで、Pathを2つのパスに分割できるようにしたいと考えています。 Aobveの例では、スプリットするポイント(32,34)を選んで、2つのパスになります。そのポイントはそのポイントで終了し、そのポイントで始まります。つまり、1つのアクションで2つの新しいリソースが作成されると同時に、別のリソース(分割されたパス)が削除されます。
したがって、上の例のパスがシステム内の唯一のパスであって、1回の呼び出しで分割した場合、システムには2つの新しいパスが含まれ、元のパスはなくなります。例:
<Path>
<Point>32,32</Point>
<Point>32,34</Point>
</Path>
<Path>
<Point>32,34</Point>
<Point>34,34</Point>
</Path>
これはどのようにRESTfullyで処理するのかと苦労しています。どのようにして、複数のリソースが作成/変更/削除され、それを呼び出し側に伝える呼び出しを処理しますか?
私は間違いなく複数の呼び出し(新しいパスを作成するための2つのPOSTと元のものを削除するDELETE)を使用してそれを把握することができますが、これを1回の呼び出しにします。
ああ...これは私が探していたものです。私はクライアントがスプリットを実行するワークフロー(私はあなたの提案が好きですが)を歩くのではなく、依然として単一の要求であることを依然として望んでいると思います。私は一定期間の間にパス分割リソースを維持することができます。クライアントは後でそのファイルを削除して分割を元に戻したり、しばらくしてから、サーバーはパス分割リソースを削除して元に戻すことができます。思考? – SingleShot
pasthsplitリソースを元に戻すと、元に戻すことができます。これにより、APIのユーザーに混乱が生じます。 DELETE verbはリソースの削除に使用され、予期されるアクションはそのリソースのみの削除です。あなたが示唆している場合は、リソースを削除するだけでなく、他のリソースを削除したり変更したりすることです。分割を元に戻したい場合は、pathsplitリソースのGETを行い、次にpayploadリソースとしてpathsplitリソースを持つ新しいundosplitリソースへのPOSTを実行します。 –
undosplitリソースは、pathsplitリソースからスプリットを元に戻す方法を知っており、新しいリソースを作成して返すことができます。 「分割を元に戻す」とは、2つのリソースを削除し、新しいリソースを作成することです。これは、元の「分割されていない」と同じですが、同じインスタンスではありません。 –