2017-01-16 3 views
3

私は大規模なWebアプリケーションを開発中です。プロジェクト内では、外部のクライアント用にRESTアプリケーションを開発中です。私は、この質問は、私が使用している特定の技術とあまり関係ないと思いますが、ちょうどその場合 - Djangoです。RESTアプリケーションのバックエンド例外処理 - 4XXエラーまたはエラーマーク付きの200を返します。

私たちは、リソースは常に状況(200、201、403、など...)

とともにタイプ

{'success': <value>, 
'object': <value> 
'error_msg': <value>, 
} 

の標準JSONオブジェクトを返すREST開発チームで大会を持っていますsuccessパラメータは、リソースの展開を成功のためのtrueが割り当てられ

return Response({'success': true, 
       'object': ..., 
       'error_msg': ...}, 
       status=status.HTTP_200_OK) 

、および0:

Djangoの実装の例それ以外の場合はです。

ここでの質問全体は、悪いことが起こった場合の適切な4XXコードまたは200?の場合にstatusパラメータに渡されるべきものです。開発チームは、何か悪いことが起こった場合はいつもHTTP_200_OKを使用するよう提案しています。ただちにsuccessにfalseを割り当ててください。 error_msgには、例外の場合に詳細なエラーメッセージが含まれます。

だから私は、対この

return Response({'success': false, 
        'object': ..., 
        'error_msg': 'Details regarding the error'}, 
        status=status.HTTP_400_BAD_REQUEST) 

のような右のいずれかを見て選ぶことができないうちの2つの選択肢:

return Response({'success': false, 
       'object': ..., 
       'error_msg': 'Details regarding the error'}, 
       status=status.HTTP_200_OK) 

(両方のケースでsuccessfalseに等しくなり、両方でそう。場合は、statusを確認することなく、successを見て何かが間違っていたことを開発者は知っているでしょう
しかし、非常に異なるerror codesは、人々がさまざまなエラーコードを思いついた理由について私が何か不足しているという不愉快な疑いを私に残す。そして、何らかの事態で私のプロジェクトがいつも同じ200ステータスコードを返すと問題に直面することがあります。たくさんの資料を読んだら、適切なエラーステータスコードを指定すると、200ステータスを返すアプローチよりも優れたパフォーマンスが得られるのですか?

答えて

1

HTTPコード私の意見では、次の理由で操作の結果についての情報を得るための素晴らしい方法です:

  • 彼らは(少なくとも開発者が)機械と人間が読めるの両方です。
  • これらはすべてのHTTPトランザクションに統合されているため、すべてのライブラリはそれらを処理するためのメカニズムを実装しています。
  • エラーコードのレパートリーは「標準化」されており、誰もその対処方法を知っており、多くの一般的なケースをカバーしています(DRFフレームワークでは、400,403、または405などの一部が自動的に使用されます)。
  • これらを無視することで、自分で実装する必要がある作業量が増えています。

もちろん、特定のケースでは十分ではないかもしれません。複数のフィールドをAPIに送信するときに400のコードを受け取ったとします。どちらが無効で、なぜそうであるかを知りたければ、依然としてerror_msgの値が必要ですが、要求が成功しなかった他の多くの理由を除外することができるので、400コードは多くの論理を簡素化します403、405 ...)。あなたの質問について

そして、それは常に同じ200を返した場合、私のプロジェクトは、トラブルに直面することができますWHAT状況で

さて、あなたはに取り扱い、すべてのエラーを残して、適切なものを実装する場合それは決して問題を引き起こすべきではありませんが、以前に議論されたように、私はこれが手の作業の複雑さを増やすように感じます。

これはちょうど私の2セントであり、反対のケースについては、より良い議論のある意見があるかもしれないことに注意してください。

関連する問題