60

Zend_Rest_Routeを介してZendFrameworkを使用してRESTfulAPIを構築しています。ファイルのアップロードの場合、プロセスを処理するためにPUTまたはPOSTを使用する必要がありますか?私はREST動詞の定義と可能な限り一貫性を保つように努めています。参照してください:PUTまたはPOST:ストーリーの残り

私がこれを理解する方法は、指定されたリソースの完全なコンテンツを更新する場合にのみ、PUTを使用する必要があるということです。PUTを使用するには、正確なURLを知っている必要があります。一方、サーバー側のアルゴリズムを使用して、指定されたリソースの従属を作成するコマンドをサーバーに送信する場合は、POSTを使用する必要があります。

これが画像をアップロードするためのRESTAPIであると仮定しましょう。サーバーが画像ファイルを操作する場合(つまり、サムネイルの作成、サイズ変更など)は、POSTを使用する必要があるということですか。生の画像ファイルをサーバーに保存したいだけの場合は、PUTを使用しますか?

PUTを使用してファイルのアップロードを処理する場合、プロセスは次のようになります。

  1. ユーザーはGETリクエストを送信して、PUTで​​ファイルをアップロードするための特定のURLを取得します。
  2. 次に、ユーザーはそのURLにPUTリクエストを送信します。
    アップロードされるファイルは生であり、ユーザーがアップロードしたファイルとまったく同じです。

私はこのようなものにまったく慣れていません。うまくいけば、私はここで理にかなっています...

これを行うための「最良の」方法を知っている場合は、コメントもお気軽に。

4

4 に答える 4

150

ここにはかなりの誤解があるようです。PUTとPOSTは、実際には置換と作成ではなく、べき等性とリソースの命名に関するものです。

PUTはべき等演算です。これを使用して、リソースの名前と、そのリソースのコンテンツとして配置するエンティティを指定します(サーバーで生成された追加の場合もあります)。重要なのは、操作を2回続けて実行すると、「同じこと」の定義がかなり緩いため、1回だけまたは20回実行した場合と同じ結果になるはずです(バイト単位である必要はありません)。バイトは同一ですが、ユーザーが提供した情報はそのままである必要があります)。PUTによって金融取引がトリガーされることは望ましくありません。

POSTはべき等ではない操作です。作成しようとしているリソースの名前を指定する必要はありません(POSTで作成する必要もありません。必要に応じて、リソース重複を排除できます)。POSTは、「新しく作成された名前でリソースを作成し、その名前が何であるかを教えてください」を実装するためによく使用されます。「新しく作成された名前」によって示されるべき等性の欠如は、それに適合します。新しいリソースが作成された場合、Locationヘッダーでリソースのロケーターを送り返すことは完全に正しいことです。

これで、クライアントがリソース名を作成してはならないというポリシーの立場を取っている場合は、POSTが作成に最適であり(理論的には、提供されたエンティティに基づいて何でも実行できます)、PUTが更新の方法になります。すべてではありませんが、多くの意味を持つ多くのRESTfulアプリケーションの場合。ユーザーに提示されるモデルがファイルシステムの場合、ユーザーにリソース名を指定させることは非常に意味があり、PUTがメインの作成操作になります(そしてPOSTは、空のディレクトリの作成など、あまり一般的ではないものに委任されます。 on; WebDAVはPOSTの必要性をさらに減らします)。

要約:作成/更新の観点からではなく、誰がリソース名を作成し、どの操作がべき等であるかという観点から考えてください。PUTは実際には作成または更新であり、POSTは実際には何でも実行できます。

于 2013-01-18T15:53:05.493 に答える
11

ファイルのアップロードには、既存のリソースを置き換える場合を除いて、必ずPOSTを使用してください。

RESTでは、POSTは新しいリソースを作成し、PUTは既存のリソースを置き換え、GETはリソースを取得し、DELETEはリソースを削除します。

ソース: http: //en.wikipedia.org/wiki/Representational_state_transfer#RESTful_web_services

于 2012-12-19T12:34:44.093 に答える
3

RESTは標準ではないため、これは簡単に宗教的な戦いに変わる可能性があります。ただし、「RESTful」と見なされるAtomPubおよびOData標準は、これに同意します。POST=作成、PUT=更新

于 2011-06-08T02:34:58.350 に答える
0

簡単な答えは、ファイルのコンテンツ全体を置き換えるため、POSTではなくPUTを使用する必要があるということです。PUTとPOSTを比較してください

PUTの正確なURLを知る必要があります

いいえ。PUTへのURLを知っている必要はありません。つまり、PUT操作の前にPUTURIが存在する必要はありません。リソースが存在しない場合は、リソースが作成されます。リソースがすでに存在する場合、リソースは新しい表現に置き換えられます。

リンクされた記事を引用するには:

PUTは、特定のURLにページを配置します。そこにすでにページがある場合は、totoに置き換えられます。そこにページがない場合は、新しいページが作成されます。これは、DELETEの後に同じ主キーを持つ新しいレコードを挿入するようなものです。

于 2011-06-08T02:31:53.610 に答える