2016-05-11 17 views
0

私は、JavaとSpring Frameworkを使用してREST APIに取り組んでいます。現在、サーバーからのメッセージをServer-ResponseというカスタムHTTPヘッダーで返します。これは、エラーが発生し、正常な要求が完了した場合に使用されます。 この目的のためにカスタムHTTPヘッダーを使用していますか?応答メッセージ用のカスタムヘッダーの使用。悪い練習?

なぜ私はこれを行いましたか?

  • オブジェクトにはボディが必要ですが、追加の文字列レスポンスが必要な場合があります。
  • Javaは厳密に型指定されています。 List<Object>を返すと、追加の文字列を返すことはできません。
  • サーバーからのメッセージは、グローバル例外ハンドラが提供するメッセージよりも具体的でなければなりません。

なぜこれをしないのですか?

  • String応答を可能にする、例外が別の方法で処理できるように@ExceptionHandlerアノテーションを提供します。
  • ヘッダーには、エラーメッセージなどの重要な情報を入れないでください。

サンプル要求

私は、次の例のURLから場所のリストを取得することができますGET:https://fakeurl.com/api/locations

リクエストヘッダ

  • は受け入れ:テキストを/ html、application/x HTML + XML、アプリケーション/ XML、Q = 0.9、画像/ WEBP、/; Q = 0.8
  • はエンコーディングを受け入れる:、GZIPを収縮、SDCH言語を受け入れ:EN-US、EN; Q = 0.8
  • Cache-Control:no-cache接続:キープアライブ
  • アップグレード不安 - 要求:1
  • ユーザーエージェント:Mozilla/5.0(Windows NT 6.1;ヤモリのような WOW64)のAppleWebKit/537.36(KHTML、)クローム/ 50.0.2661.94 サファリ/ 537.36
  • ステータスコード:200 OK

レスポンスヘッダ

  • のContent-Type:アプリケーション/ json; charset = UTF-8
  • 日付:Wed、11 May 2016 15:41:03 GMT
  • 有効期限:1969年12月31日水曜日ES T期限切れ:-1
  • サーバー:Apache-Coyote/1。1
  • サーバーの応答:すべての場所を正常に取得しました!
  • 転送エンコード:チャンク
  • X-Powered-By:Servlet 2.5; JBossの-5.0/JBossWeb-2.1

レスポンスボディ

[ 
    {"locId":1,"descr":"New York","activeStatus":"ACTIVE"}, 
    {"locId":2,"descr":"Los Angelas","activeStatus":"ACTIVE"}, 
    {"locId":3,"descr":"Canada","activeStatus":"ACTIVE"}, 
    {"locId":4,"descr":"Mexico","activeStatus":"ACTIVE"}, 
    {"locId":5,"descr":"Nebraska","activeStatus":"ACTIVE"}, 
    {"locId":6,"descr":"Texas","activeStatus":"ACTIVE"}, 
    {"locId":7,"descr":"Michigan","activeStatus":"ACTIVE"} 
] 
+1

明確な答えはありませんが、ヘッダーは応答ではありません。それはメタデータです。あなたはいつもあなたが好きなすべてのfiledsを含むカスタム 'Response'オブジェクトを返すことができます。http://stackoverflow.com/questions/12806386/standard-json-api-response-format – zapl

+0

;それはまさに私が探していたものです。私は1年前にこのことを知りたがっています。 –

答えて

1

TL/DR:それはあなたの実際の使用状況によって異なります。

本当にカスタムヘッダーで渡す情報をどのように処理するかによって異なります。 enveloppeレベルで情報を渡す場合は、カスタムヘッダーを使用することが理にかなっています。つまり、この情報は取得したいデータとは無関係であり、そこには格納しないでくださいが、カプセル化ツールで使用されます。現実の世界の例は、異なるプロトコル、例えばHTTP、例えばメール(別のメールへの返信)と専用プロトコルを介してアクセスできるデータサーバである。その場合、実際のサーバーに到達できなかった理由や方法についての情報はenveloppeレベルで渡され、カスタム応答ヘッダーが具体的に適用されます。

別の情報タイプにアクセスするために同じツールを使用する場合も、もう1つの例があります。ペイロードには、発信者に透過的に渡される実際の情報だけが含まれていなければならず、エラー条件は応答ヘッダーに渡され、交換ツールによって処理されます。

カスタムヘッダーはX-で始まる必要があります。

関連する問題