ユーザーが提供したデータを受け入れるサービス用のREST APIを作成しています。私はすべての操作を完全に非同期にしたいと思います。これには、PUT、POST、DELETE、おそらくGETリクエストが含まれます。私の考えは、要求を受け取り、それが有効な要求であることを保証するのに十分なほど処理し、その後、データが最終的に利用可能なURLおよび後続の要求が処理されたデータと照合できるようにHTTP 202受け入れられた応答を渡す。要求が無効であれば、HTTP 400を送信します。非同期操作にhttpステータス202を使用します。
クライアントは、今後、私がそれらを提供したURLをチェックし、トークンを渡す責任があります。データが利用可能な場合、私は通常の200または201を返しますが、まだリクエストを処理している場合、処理が完了していないことを示す別の202を送信します。データの処理中にエラーが発生した場合は、必要に応じて4xxまたは5xxステータスを送信します。
これは、すべての有効なリクエストをリクエストプールにダンプし、ワーカーがキューから取り出してリクエストを処理できるようにするためです。利用可能なプールのサイズや人数はわからないので、Google App Engineの30秒制限を満たすのに十分な速さでリクエストを受け取ることはできません。
私の質問は次のとおりです。このようにリクエストを処理してRESTを歪めていますか?たとえば、ブラウザは要求に即座に応答する必要があるようです。私のHTMLページでは、構造化ページで応答し、AJAXを使用してデータ要求を処理する予定です。
私は、このようにRESTを使用してデータを処理する際の意見や経験にほとんど関心があります。
あなたはブラウザが直接これを使用することを期待していますか?このソリューションはAPI(@systempuntooutの答えを参照)にとってはうまくいくようですが、明らかにウェブブラウザでは機能しません。 –
私は、ブラウザにGET操作を制限し、最も可能性の高いクエリをメモリに保持しています(memcachedなど)。任意の長期クエリは、AJAXを介してポーリングを使用して表示されます(例えば、大きな結果セットをフィルタリングする)。 PUTとPOSTはおそらく、サーバーがタスクを完了するまで、ユーザーに標準の「メディアが処理されています」というメッセージを与えるYouTubeビデオのアップロードと似ています。 –
いくつかのrestapiのリソースhttp://stackoverflow.com/questions/14124056/rest-api-202-versus-204/27766943#27766943 –