2016-04-05 25 views
3

サーバー上にオブジェクトを作成するREST APIを実装しています。オブジェクトの作成には複数のステップがあり、しばらく時間がかかることがあります。私はユーザーがそれを待つことを望んでいません。私は、クライアント要求の一意の要求IDを持つ202応答を返すだけで、サーバー上のいくつかのスレッドを開始してオブジェクトを作成します。クライアントは、要求が完了したかどうかを確認するために、後でチェックすることになっています。このフローは次のようになります。非同期タスクのHTTPステータスコード

  1. クライアントはオブジェクトをPOSTします。
  2. サーバーは、クライアントが第三段階で/my-app/<reqId>

のGETを行い、これらの事が起こるかもしれませんLocationヘッダ/my-app/<reqId>

  • で202受理コードで応答:

    1. オブジェクト作成はまだ進行中です(クライアントはいつか再度確認する必要があります)。
    2. エラーが発生しました。
    3. オブジェクトは正常に作成されました。

    私のAPI /my-app/<reqId>は、上記の3つのシナリオに対してどのようなHTTPコードを返すべきですか?

  • 答えて

    3

    最初と少し違うかもしれません。 Locationヘッダーには、要求に接続されている実際のリソースを指し示すspecific meaningがあります。基本的に要求されたものの「結果」であり、要求自体の状態を示すリソースではありません。これは小さな違いかもしれませんが、後で混乱するかもしれません。

    saysまた、202は、要求自体の進行状況を示す「状態」リソースを示すコンテンツを返す必要があります。

    ので、流れは次のようになります。

    1. クライアントはPOST
    2. Serverは202 Acceptedを送信しません。 Locationヘッダーは、要求されたリソースが存在するURIを指します(これはではなくの状態です)。これは処理が完了するまで404になります。また、202の内容には「状態」表現が含まれている場合があります。 Content-Locationヘッダーには、この「状態」リソースへのリンクがあります。
    3. クライアントGET進行状況を確認するための状態リソースです。このリソースは常に存在するため、常に200を返します。
    4. 状態が成功を示している場合は、Locationに示されているリソースが存在し、存在しない場合は存在しません。状態リソースは無期限に存在し続けます。
    +0

    実際のリソースを作成する際のエラーはどうですか?レスポンスの本文にエラーの詳細を含む 'state'リソースの200を返すべきですか? – falcon

    +1

    はい、「状態」は常に存在するため、エラーはありません。サーバー上のバックグラウンド作成プロセスでエラーが発生した場合は、プロトコル自体ではなく、これを示す内容です。代わりに、要求されたリソース(処理の結果)がそこにあるかどうかだけを確認することができます。それがなければ '404'、作成されると内容が' 200'に切り替わります。ただし、エラーが発生した場合は作成されることはありません。 –

    関連する問題