7

請求書機能を提供するRESTサービスがあります。たとえば、RESTサービスを介して請求書を作成、更新、削除できます。

ただし、請求書を複数の新しい請求書に分割する機能が必要になりました。つまり、このメソッドでは、1つの請求書に基づいてxの請求書を作成し、1つのトランザクションで元の請求書を削除する必要があります。

また、反対の方法、つまり複数の請求書を1つにまとめる方法も必要です。

そのようなアーキテクトをRESTfulな方法で作成するにはどうすればよいですか?

4

3 に答える 3

4

2 つのリソースをマージしたいという同様の問題がありました。長い議論の末、消費者はマージされる 2 つのリソースを含むマージ リクエスト リソースを POST することにしました。それを調べた結果、完全なソース リソースとターゲット リソースの両方は必要なく、代わりに一意の識別子だけの POST で十分であると判断しました。本文に 2 つの ID が入っているだけでマージ リクエストを作成しませんでした。URL で表す方が簡単だったので、そのようにしました。マージ リクエストの POSTing からの応答は、マージされたリソースです。

私は、これが良い戦略であったかどうかを述べるほど REST の達人ではないと思いますが、私たちにとっては単純な解決策だったので、それを採用しました。

于 2012-04-27T11:42:06.593 に答える
3

この機能を「1 つのトランザクション」で実装したいとおっしゃる場合、新しい請求書の生成と古い請求書の削除を 1 つの API 呼び出しに結合する必要があると既に判断されていると思います。これが正しいアプローチです。Web サービスでは、おしゃべりを減らしたいと思います。おそらく、この機能が新しい請求書を生成し、古い請求書を削除する方法について、いくつかのビジネス ロジックがあります。したがって、RESTful な方法でこれを構築する方法を尋ねると、この新しい API メソッドにどの HTTP 動詞 (つまり、GET、POST、PUT、または DELETE) を使用するのか疑問に思うと思います。通常、これらの動詞は、次の方法で CRUD タイプの操作にマップされます。

  • 作成 -> POST
  • 読み取り -> GET
  • 更新 -> PUT
  • 削除 -> 削除

したがって、関数がレコードの作成と削除の両方を行う場合に使用する動詞はどれですか。REST API の一般的なルールは、CRUD への明確なマッピングがない場合、サーバーの状態に変更がある場合は POST を使用し、サーバーの状態を変更しない情報を返すだけの場合は GET を使用することです。したがって、この場合は POST を使用します。

これを設計するための追加のガイダンスを探している場合は、探しているものをより具体的にしてください。私がお手伝いします。

于 2012-04-27T12:42:10.430 に答える
0

私は次のようなことをします、

POST /InvoiceSplitter?sourceInvoiceId=99

POST /InvoiceMerger?sourceInvoiceIds=101,87,23,45
于 2012-04-27T14:13:22.760 に答える