請求書機能を提供するRESTサービスがあります。たとえば、RESTサービスを介して請求書を作成、更新、削除できます。
ただし、請求書を複数の新しい請求書に分割する機能が必要になりました。つまり、このメソッドでは、1つの請求書に基づいてxの請求書を作成し、1つのトランザクションで元の請求書を削除する必要があります。
また、反対の方法、つまり複数の請求書を1つにまとめる方法も必要です。
そのようなアーキテクトをRESTfulな方法で作成するにはどうすればよいですか?
2 つのリソースをマージしたいという同様の問題がありました。長い議論の末、消費者はマージされる 2 つのリソースを含むマージ リクエスト リソースを POST することにしました。それを調べた結果、完全なソース リソースとターゲット リソースの両方は必要なく、代わりに一意の識別子だけの POST で十分であると判断しました。本文に 2 つの ID が入っているだけでマージ リクエストを作成しませんでした。URL で表す方が簡単だったので、そのようにしました。マージ リクエストの POSTing からの応答は、マージされたリソースです。
私は、これが良い戦略であったかどうかを述べるほど REST の達人ではないと思いますが、私たちにとっては単純な解決策だったので、それを採用しました。
この機能を「1 つのトランザクション」で実装したいとおっしゃる場合、新しい請求書の生成と古い請求書の削除を 1 つの API 呼び出しに結合する必要があると既に判断されていると思います。これが正しいアプローチです。Web サービスでは、おしゃべりを減らしたいと思います。おそらく、この機能が新しい請求書を生成し、古い請求書を削除する方法について、いくつかのビジネス ロジックがあります。したがって、RESTful な方法でこれを構築する方法を尋ねると、この新しい API メソッドにどの HTTP 動詞 (つまり、GET、POST、PUT、または DELETE) を使用するのか疑問に思うと思います。通常、これらの動詞は、次の方法で CRUD タイプの操作にマップされます。
したがって、関数がレコードの作成と削除の両方を行う場合に使用する動詞はどれですか。REST API の一般的なルールは、CRUD への明確なマッピングがない場合、サーバーの状態に変更がある場合は POST を使用し、サーバーの状態を変更しない情報を返すだけの場合は GET を使用することです。したがって、この場合は POST を使用します。
これを設計するための追加のガイダンスを探している場合は、探しているものをより具体的にしてください。私がお手伝いします。
私は次のようなことをします、
POST /InvoiceSplitter?sourceInvoiceId=99
と
POST /InvoiceMerger?sourceInvoiceIds=101,87,23,45