1. ホーム
  2. http

[解決済み] リクエストの一部が成功した場合のHTTPステータスコード

2022-06-08 04:13:31

質問

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

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

リストに見つからないユーザーを含めることが許可されていない場合、問題は回避されます。その場合、送信しようとすると、4xx エラーが発生するだけです。しかし、この方法で API を形成する意味はありません。 一方、エラー条件を純粋にアプリケーション固有のものと考えることもできます。しかし、200を送信するのは正しいとは思えません。そして、いつエラーレスポンスを深く見るべきかのヒントをクライアントに与えるのは良いことでしょう。例えば、そのユーザーに何度もメッセージを送るのを避けるためです。

どのように解決するのですか?

非常に似たような問題を扱ったことがあります。この場合、私は

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拡張であり、クライアントも制御する必要があります。