私はユーザードメインオブジェクト(JAXBを使用)のマーシャリングされたXML表現で/ user/{userId}に応答するRESTful Webサービスを持っています。クライアントに期待している情報が返ってこない場合は、そのリクエストに関する追加の詳細情報をクライアントに返信する適切な方法は何でしょうか?非分散Javaアプリケーションでは、データアクセスまたはセキュリティ例外を処理するキャッチブロックがある可能性があります。/user/{userId}が何も返さない場合(例えば、Webサービス永続化メカニズムが動作していない、セキュリティ制限などがあります)、クライアントへの応答に意味のある情報を含めるにはどうすればいいですか?RESTful WSを介して戻る前にオブジェクトにメタデータを追加する適切な方法は何ですか?
私は、ドメインオブジェクトのさまざまな表現を探しているわけではないので、DTOは私が必要と考えるものではありません。むしろ、私はクライアントが期待した情報を返すことを妨げていた要求の間に何が起こったかについての情報を探しています。関連するメタデータを保持する一種のResponseObject内にドメインオブジェクトを囲むことは適切でしょうか?このアプローチの欠点は、同じメタデータ要件を持たない非RESTfulな実装を提供する可能性があるため、サービスレイヤーのインターフェイスにすべてResponseObjectがあることです。
+1は「SOAPのように酷く聞こえる」という意味です。 SOAPのやり方は、RESTを魅力的にするものであり、私はプロトコルを後方に曲げたくありません。私は個人的にはHTTPステータスコードの手法を提案していますが、代替案については不思議に思っていました。 – Fil
RESTサービスを作成している場合は、サービスのユーザーにAPIを正しく処理させるために、可能な応答コードと、いつ/なぜそれらがあなたのドキュメントに記述されるべきかを述べる必要があります。例えば、 'GET/users/{userId}というユーザ呼び出しを取得するためです。可能な応答は、XML形式のユーザのペイロードを含む200、またはIDが見つからない場合は404、クライアントのフォルトではない内部サーバエラーがある場合は500などである。可能な応答を文書化する以外に、あなたの手からあなたはクライアントに必要なすべての情報を提供しています。 –
+1これはRESTのポイントです.HTTPプロトコルには、あなたが求めていることを処理するためのメカニズムが既に用意されているため、RESTはそのようなことを特にサポートしていません。ユーザーが見つからない場合は404を返し、内部エラーの場合は500を返します。サービスにセキュリティがある場合は、401または403を返すことがあります。フォーマットが間違っている(userIdの非数値など)場合は、400を返します。 – Qwerky