2016-05-26 15 views
3

私は高レベルの視点からの非同期POSTメソッドの基本原則を理解していると思います。大きな利点は、POSTからのデータの処理がまだ完了していなくても、発信者が迅速な応答を得ることです。非同期GET要求はどのように機能しますか?

しかし、これはGETメソッドにどのように当てはまるのか分かりません。応答にはデータが含まれている必要があります。処理が完了する前に、どのように応答することができますか?非同期メソッドを使用するGETリクエストハンドラを持つAPIを使用する理由

私はこの一般的なタイプの問題ではないと思いますが、Web APIを使用してC#で書いています。

+0

IO /ネットワーク操作が非同期的に進行する間に、現在のスレッドを解放します。 GETまたはPOSTはそれには何の違いもありません。どちらの場合でも、Webサーバーから何かを求めており、何らかの応答が得られます。ペイロードを持っているかどうかは関係ありません。 – ManoDestra

+1

待っていることを本当に知っていますか?多くの人が混乱を招くバックグラウンドスレッドで作業を開始すると思っています。 – usr

答えて

3

ネットワーク上には、非同期HTTPコールなどはありません。それは単にTCPを介して流れるデータです。サーバーは、クライアントが内部的に同期しているか非同期であるかを判別できません。

呼び出し側は実際に、サーバは後半早い応答行とヘッダーを送信し、データができ迅速な対応

を取得します。しかし、これは、非同期IOまたは非同期.NETサーバーの実装とは関係ありません。それはちょうど早く到着するいくつかのバイトと遅いものです。

ここでGETとPOSTの違いはありません。

なぜ...非同期メソッドを使用しますか?

これらは、クライアントおよび/またはサーバーにとってスケーラビリティの利点を持つことができます。 HTTPレベルでの違いはありません。

+0

確かに、サーバーは(1)非同期プロセスを開始すること、(2)クライアントにデータを返すこと、(3)接続を閉じること、(4)非同期作業を完了することができます。私は、OPが何を求めているのかと思う。 –

+1

@AaronBrager今私は両方が誤解されていると思う。 – usr

+0

私は質問があいまいであると思うので、いくつかの混乱を解消させてください。私にこの質問をするには2つのことがあります。 1つは、アイデンティティMVCサンプルコードのAccountControllerで非同期エンドポイントを使用することです。私はそのコードを書いた人がもっと知っていることを知っています。私は多くのエンドポイントを非同期にするという目的を達成できませんでした。もう一つは、さまざまな例で見たように、エンドポイントでのEntityFramework ToListAsyncの使用です。しかし、データが取得されたときに応答を送信できる場合は、より意味があります。 –

1

したがって、アプリケーションはデータを必要としない他のことを行うことができます。

あなたの同期としてGETを実装する(そして、あなたがそれを得るために20秒かかり、悪いネットワーク、上にあるとしましょう)、あなたができない

  1. を表示するプログレス
  2. は、ユーザーを許可する場合サーバーWAN:
  3. をキャンセルすることは、彼らが他の
  4. は彼らがアプリ

EDIT(コメントを参照)の他の部分を使用してみましょうGETを開始しましょう(スレッドをあきらめる)ほとんど同じ理由で非同期的に応答します。実際にデータを取得するのは非同期で時間がかかるかもしれません。スレッド全体をブロックしたくない場合があります。

+1

なぜあなたは*クライアント*が非同期にそれを行うのか話しているようです。 (あなたの答えはそれが問題なら大変です)私の解釈は、OPがなぜ*サーバ*がGET要求に非同期的に応答するのかを尋ねていたことでした。 –

+1

私は今3回それを読んだので、私は話すことができません。私は彼らが彼らに最も合った答えを選ぶだろうと思う。 –

+0

私はなぜSERVERが非同期的に応答するのかを尋ねるつもりでした。この重要な違いを指摘してくれてありがとう。クライアントにとっては、あなたの応答は理にかなっています。 –

0

RESTful APIをビルドしている場合、GETはリソース(またはコレクション)を返して冪等でなければならない(何も変更しない)のは意味がありません。

これらの原則に従わない場合は、、GETリクエストが非同期的に動作する可能性があります。例えば、GET /messages/3は、クライアントにメッセージを返すことができますが、その後、非同期のような他の作業を行います。

  • は、メッセージが
  • を読んでいることを示す、ユーザーの他のクライアントにプッシュ通知を送信読んで

    • は、メッセージをマークこれらのメッセージなど
    • を削除する
    • スケジュールcronジョブ将来的には30日

    なしRESTfulなAPIと見なされないであろうが、それでもティムから使用されていますeから時間。

    関連する問題