web-dev-qa-db-ja.com

部分的に成功したリクエストのHTTPステータスコード

ユーザーにメッセージを送信するアプリケーションがあります。ポストリクエストでは、その特定のメッセージを受信する必要があるすべてのユーザーで構成されるXML文字列が転送されます。リスト内のユーザーのいずれかが存在しない場合、不足しているユーザーのリストをクライアントに返して、さらに評価します。

今、私は、リクエストは受け入れられたが、実行できないことがあると言って、アプリケーションの適切なステータスコードは何かを自問しています。

リストに行方不明のユーザーを含めることが許可されていなければ、問題は回避されます。次に、送信の試みは4xxエラーを受け取ります。ただし、この方法でAPIを作成しても意味がありません。一方、エラー状態は純粋にアプリケーション固有であると考えることができます。しかし、200を送信するだけでは正しくありません。また、クライアントにエラー応答を深く調べるときのヒントを与えるといいでしょう。例えばそのユーザーに何度もメッセージを送信しないようにするため

94
Norbert Hartl

私は非常に似た問題に対処しました。この場合、私は

207マルチステータス

現在、これは厳密なHTTPではなく、WebDAV拡張機能の一部です。したがって、クライアントも制御できない場合、これはあなたに適していません。そうした場合、次のようなことができます。

   <?xml version="1.0" encoding="utf-8" ?>
   <D:multistatus xmlns:D='DAV:'>
     <D:response>
       <D:user>user-123</D:user>
       <D:status>success</D:status>
     </D:response>
     <D:response>
       <D:user>user-789</D:user>
       <D:status>failure</D:status>
     </D:response>
   </D:multistatus>

ただし、これもHTTP拡張機能であり、クライアントも制御する必要があります。

56
Kylar

私は同じ問題を抱えており、2つの異なるソリューションを使用することになりました。

  • HTTPリターンコード202: Acceptedは、リクエストが正常であることを示しますが、すべてが実際に正常に実行されたという保証はありません。
  • 応答に通常の200を返しますが、応答本文にはパンアウトしなかったもののリストを含めます。

通常、2番目の方法が最適ですが、1番目の方法は、怠けている場合や処理にキューを使用する場合に最適です。

59
Arne

206部分コンテンツの使用についてはどうですか。 206は範囲に関するものですが、リクエストが部分的に成功したことを示している場合はどうなりますか?

0
Yusuf