web-dev-qa-db-ja.com

WebInvokeの利点POST WEBGETと比較した場合

こんにちは、次のようなWEBINVOKEメソッドを使用したwcf RESTの例の1つを見つけました

[OperationContract]
[WebInvoke(
BodyStyle=WebMessageBodyStyle.Bare,
Method="POST",
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);


[OperationContract]
[WebGet(
BodyStyle= WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml)]
Student[] GetAllStudents();

私の質問は、以下のようにWEBINVOKEの代わりにWEBGETメソッドを使用できますか?WEBINVOKE POSTとWEBGETの違いは何ですか?私の観察によると、クエリ文字列をWEbGetとWebInvoke POSTの両方のURIテンプレート、WebInvokeを使用して取得できる利点は何ですかPOST WEBGETを使用して取得できない

[OperationContract]
[WebGet(
BodyStyle=WebMessageBodyStyle.Bare, 
RequestFormat=WebMessageFormat.Xml,
ResponseFormat=WebMessageFormat.Xml,
UriTemplate="CreateStudent/{StudentName}/{Chair}/{AverageNote}")]
int Insert(string StudentName, string Chair, string AverageNote);
28
venkat

非常に大きな違いです。まず第一にRESTは通常これらのHTTP動詞で使用されます:

  • GET-アイテムを取得する
  • POST-アイテムの挿入
  • PUT-アイテムの更新
  • DELETE-アイテムを削除する

何かを取得してからアイテムを取得する場合は、GETを使用しないでください。データの変更にHTTP GETを使用することは、Web開発全体では悪い習慣と見なされています。 GETをトリガーするには、Webページにリンクを作成するか、ブラウザへのURLを入力するだけです。あなたは50回リフレッシュをヒットし、50の同じ挿入があります。データの変更は常にPOSTで行う必要があります。 HTTPをトリガーするフォームがある場合POST(Postを直接トリガーすることはできません)、通常、ブラウザを更新すると、フォームを再度送信するかどうか=本当に投稿するかどうかを尋ねますサーバーにデータを再度処理します。

もう1つの問題は、GETリクエストをキャッシュしてリダイレクトできるが、POSTリクエストではできないことです。

48
Ladislav Mrnka

このリンクは、提供された回答へのさらなる洞察を提供するはずです。

http://blog.markkoltnuk.com/2011/02/14/understanding-wcf-webinvokewebget-attributes/

WebInvokeとWebGetの違いを説明しましょう。

WebGet(データの取得に一般的に使用されます)

WebGet属性は、GET動詞を使用して操作を公開します。エンドポイントにアクセスするには、サービスへのURIをアドレスバーに入力して、Webブラウザーを介して直接アクセスします。パラメータは、クエリ文字列パラメータとして、またはURIに埋め込んで、URI内で送信できます。 WebGet属性は、そのキャッシング機能のため、データの取得にのみ使用する必要があります。

WebInvoke(データの入力/更新に一般的に使用されます)WebInvoke属性は、POST、PUT、DELETEなどの他のHTTP動詞を使用してサービスを公開します。 POSTはデフォルト値ですが、属性のMethodプロパティを設定することで変更できます。WebInvoke属性は、データの入力/更新にのみ使用してください。

5
ramizmoh

あなたの質問に答えるには、HTTPプロトコルのセマンティクス、特にGET、POST、PUT、DELETEなどのHTTP動詞を理解することをお勧めします
HTTP GETは、任意の場所からリソースを取得するために行われるため、リクエストがリソースの状態を変更することはありません。
HTTP POSTは、コンテンツの作成と更新に使用されるため、上記のInsertメソッドで使用されています。
上記のWCFサービスを実行して、これらのリクエストがどのように形成され、サーバーに表示されるかを確認すると、POSTにあるボディペイロードがGETにないことがわかります。 POSTの場合、本文には、作成\更新が必要なコンテンツが含まれます。

2
Chandermani