2016-09-30 7 views
0

私はAPI呼び出しにPOSTまたはPUTを使用する必要があるのだろうかと思います。作成または更新可能なAPI呼び出しにPOSTまたはPUTを使用する必要があります

バックエンドは、自分のDBの既存の行を作成または更新します。私はPOSTを使用して更新を行うPUTを使用していることを知っていますが、どちらをトグル作成/更新するかわからないときはどうすればよいですか?

答えて

3

私はPUTとPOSTの間で決定するのに最適な方法とは考えていません。これは、rest cook bookによってバックアップされます。

HTTPメソッドPOSTおよびPUTは、CRUDの作成および更新のHTTPに相当しません。

私はあなたがその記事を読むことをお勧めしますが、いくつかのコメントにはそれが得られないと言われているので、私は別の方法で説明しようとします。

  1. PUTまたはPOSTリクエストの直後に同じURLにGETリクエストを行うとどうなるか自問してください。 PUTまたはPOSTしたものと同じデータを取得した場合は、おそらくPUT要求であるはずです。データを見るために別のURLに移動しなければならない場合は、おそらくPOSTでなければなりません(レスポンスにLocationヘッダーを使用してPOSTされたデータをGET要求で表示できるクライアントに伝えることができます)。
  2. Idempotencyは、作成/更新よりもはるかに重要であるか、実際には同じURLに対してGET要求を行うことができるかどうかです。 PUTリクエストは冪等であり(同じリクエストを複数回繰り返すことは1回と同じ効果があります)、POSTリクエストは同じではありません(同じリクエストを複数回行うことは1回と同じではありません)。要求が作成されるたびに追加の副作用がある場合は、POSTを使用する必要があります。

あなたの要求が冪等で、リソースが正面にある正確なURLを知っているように聞こえるので、おそらくPUTを使うべきだと思います。

レストクックブックの記事では、リソースの作成と更新の両方にPUTを使用することができます。

PUTを使用できる場合は、クライアントにサービスに関する詳細情報を提供する必要があります。たとえば、同じ要求が複数回発生するかどうかは気にしないので、フォールトトレランス、復元力、および配信はPUT要求で非常に簡単です。 POST要求を行うフォールト・トレラント・アプリケーションを構築するには、要求が一度しか行われないようにする必要があるため、ややこしいことがあります。再試行ロジックを実装すると、PUTが簡単になります。なぜなら、要求が失敗した場所を気にしないため、冪等のために再試行することができるからです。

POSTの再試行を実装するのは少し難しくなります。なぜなら、クライアントは要求が成功したかどうかを本当に確信していないからで、複数のPOST要求を作成すると被害が出る可能性があるということです。

0

PUT apiコール。 POSTは、データの作成時に主に使用されます。

+0

データを作成することもできますし、作成と更新の両方にPUTを使用することもできますか? – user2636197

+0

その場合、POSTを使用することができます。 –

関連する問題