インターフェース設計とレスポンスコード参照

9956 ワード

項目応答はhttp定義のレスポンスコードを参照して、成功条件で要求内容に直接戻ります。コンテンツなしで204に戻ります。すべての失敗は直接に異常を投げます。システムは統一された異常処理を使用しています。json要求に対してJsonに戻ります。Json以外は対応するエラーページを返します。
プロジェクトでは、発生した任意の要求が200ではない先頭の応答に戻るときは、直接にhttp異常を投げます。プロジェクトには統一された異常処理センターがあります。異常処理センターは統一化処理を行います。例えば、最も基本的な、jsonは要求に応じて、jsonではなく応答ページ面を要求します。自分の業務に応じて各種の異常をカスタマイズします。例えば、リソース種類のエラーResource Exceptionです。(HttpExceptionから引き継ぎます。StreResource FaileExceptionはResource Exceptionから継承します。各種の異常を設計しています。業務コードの中でエラーを返さなければならない時、直接throwという異常があればいいです。非常に便利です。
応答
Jsonを使うことに応答して、http標準に従います。
成功
200(他の200の先頭のレスポンスコードを含む)の場合は、直接に要求結果に戻ります。204は、コンテンツなしの成功応答で、successコールコールを実行しますが、dataデータがありません。
失敗
エラーが発生した場合はすべてhttp異常応答を使用します。エラー情報は応答体のerrorフィールドに含まれます。
422応答コードが422認証に失敗したエラーに対して、応答体の中にはerrorフィールドに戻らないものがあります。応答はkey-value形式のキーパッドのペアで、keyはエラーフィールドを表し、valueはエラー原因を表します。例えば、「name=」の名前は空ではなく、「mobile=」の携帯番号は空ではありません。

ajax要求におけるerrorでエラーを処理する:
error: function (XMLHttpRequest, textStatus, errorThrown) {
        var msg=""; 
        if(XMLHttpRequest.status == 401){
              //   ,         401.
              //        token  ,            token
        }
        if (XMLHttpRequest.responseJSON && XMLHttpRequest.responseJSON.error) {
            //               
            msg += XMLHttpRequest.responseJSON.error;
        } else {
            //         error
            if (XMLHttpRequest.status == 422) {
                //422               . :["name"=>"       ","mobile"=>"        "]
                var erroMsg = JSON.parse(XMLHttpRequest.responseText);
                $.each(erroMsg, function (k, v) {
                    msg += v[0] + "\
"; }); } else { // msg += XMLHttpRequest.statusText + ":" + XMLHttpRequest.status; } } // msg }
詳細に紹介する
応答コードは、HTTPサーバによって送信された応答の最初の行に現れる3ビットの10進数の数字からなる。
応答コードは5つのタイプに分けられ、それらの第1のビット数によって表される。
1xx:  ,    ,     
2xx:  ,        、      
3xx:   ,      ,           
4xx:     ,                 
5xx:     ,                
    100 => 'Continue', //   
    101 => 'Switching Protocols', //       
    102 => 'Processing',             // RFC2518
    200 => 'OK',
    201 => 'Created',                 //    
    202 => 'Accepted',              //    
    203 => 'Non-Authoritative Information',  //      
    204 => 'No Content',   //    
    205 => 'Reset Content',    //     
    206 => 'Partial Content',  //     
    207 => 'Multi-Status',          // RFC4918
    208 => 'Already Reported',      // RFC5842
    226 => 'IM Used',               // RFC3229
    300 => 'Multiple Choices',  //    
    301 => 'Moved Permanently',  //       
    302 => 'Found',   //   
    303 => 'See Other',   //     
    304 => 'Not Modified',   //    
    305 => 'Use Proxy',    //     
    307 => 'Temporary Redirect',  //      
    308 => 'Permanent Redirect',    // RFC7238
    400 => 'Bad Request',   //     
    401 => 'Unauthorized',   //    
    402 => 'Payment Required',  //     
    403 => 'Forbidden',   //   
    404 => 'Not Found',   //    
    405 => 'Method Not Allowed',   //       
    406 => 'Not Acceptable',   //     
    407 => 'Proxy Authentication Required',   //       
    408 => 'Request Timeout',   //     
    409 => 'Conflict',   //   
    410 => 'Gone',    //    
    411 => 'Length Required',   //      
    412 => 'Precondition Failed',    //      
    413 => 'Payload Too Large',    //       
    414 => 'URI Too Long',    //  URI   
    415 => 'Unsupported Media Type',   //         
    416 => 'Range Not Satisfiable',     //          
    417 => 'Expectation Failed',     //      
    418 => 'I\'m a teapot',                                               // RFC2324
    421 => 'Misdirected Request',                                         // RFC7540
    422 => 'Unprocessable Entity',                                        // RFC4918,    
    423 => 'Locked',                                                      // RFC4918
    424 => 'Failed Dependency',                                           // RFC4918
    425 => 'Reserved for WebDAV advanced collections expired proposal',   // RFC2817
    426 => 'Upgrade Required',                                            // RFC2817
    428 => 'Precondition Required',                                       // RFC6585
    429 => 'Too Many Requests',                                           // RFC6585
    431 => 'Request Header Fields Too Large',                             // RFC6585
    451 => 'Unavailable For Legal Reasons',                               // RFC7725
    500 => 'Internal Server Error',   //        
    501 => 'Not Implemented',   //     
    502 => 'Bad Gateway',     //     
    503 => 'Service Unavailable',   //      /  
    504 => 'Gateway Timeout',   //     
    505 => 'HTTP Version Not Supported',   //HTTP      
    506 => 'Variant Also Negotiates (Experimental)',                      // RFC2295
    507 => 'Insufficient Storage',                                        // RFC4918
    508 => 'Loop Detected',                                               // RFC5842
    510 => 'Not Extended',                                                // RFC2774
    511 => 'Network Authentication Required',                             // RFC6585
部分応答コードの詳細紹介
詳細については、httpレスポンスコードを参照してください。
  • 100 Continue初期の要求はすでに受け入れられました。お客様は要求の残りの部分を引き続き送信します。(HTTP 1.1新規)
  • 101 Switch Protocolsサーバは、クライアントの要求に従って別のプロトコル(HTTP 1.1新規)
  • に変換される。
  • OKは正常です。GETとPOST要求に対する応答文書は後に付いています。
  • 201 Createdサーバは文書を作成しました。LocationヘッダはそのURLを与えました。
  • Accteptedは要求を受け入れましたが、処理はまだ完了していません。
  • 203 Non-Authortative Information文書は正常に戻ってきましたが、いくつかの応答ヘッダは正しくないかもしれません。使用されているのは文書のコピーです。
  • 204 No Contentは新しい文書がありません。ブラウザは元の文書を表示し続けるべきです。ユーザーが定期的にページを更新するなら、Servletはユーザー文書が十分に新しいと判断できます。この状態コードは有用です。
  • Reset Contentは新しい内容がないが、ブラウザは表示された内容をリセットしなければならない。フォーム入力内容(HTTP 1.1の新しいもの)をブラウザに強制的にクリアするために使用される。
  • 206 Partal ContottクライアントはRangeヘッダを持つGET要求を送信し、サーバはそれを完了しました。
  • 300 Multiple Choicesクライアントによって要求されたドキュメントは、すでに返却された文書内にリストされています。サーバが優先的に選択されるなら、Location応答ヘッダで指定するべきです。
  • 301 Moved Permanentlyクライアントが要求する文書は他のところにあり、新しいURLはLocationヘッダに与えられています。ブラウザは新しいURLに自動的にアクセスすべきです。
  • 302 Foundは301と類似しているが、新しいURLは永久的なものではなく一時的な代替と見なすべきである。 , HTTP1.0 “Moved Temporatily”. , URL, 。 301 。 , http://host/~user( ), 301, 302。 , GET 。 307。
  • 303 See Otherは301/302と類似しており、元の要求がPOSTであれば、Locationヘッダが指定するリダイレクト先文書はGETによって抽出されるべきであることが異なる。
  • 304 Not Modifiedクライアントは、バッファされた文書を有しており、文書の要求を発行しています。(一般的にはIf-Maodified-Sinceを提供することは、クライアントが指定された日付より更新したいということです。)。サーバは、クライアントに対して、バッファされていた文書はまだ使用可能です。
  • 305 Use Proxyクライアントから要求された文書はLocationヘッダで指定されたプロキシサーバから抽出されるべきである(HTTP 1.1の新規)。
  • 307 Temporary Redirectは302と同じです。 302 , POST, POST 303 。 ,HTTP 1.1 307, : 303 , GET POST ; 307 , GET 。(HTTP 1.1 )
  • 400 Bad Request要求に構文エラーが発生しました。
  • 401 Uauthorizedクライアントは、許可なしにパスワードで保護されたページにアクセスしようとします。応答にはWW-Authenticateヘッダが含まれています。このブラウザは、ユーザ名/パスワードダイアログを表示し、適切なAuthoriationヘッダを記入した後、再度要求を出します。
  • 403 Forbiddenリソースは利用できません。サーバはお客様の要求を理解していますが、処理を拒否します。通常はサーバ上のファイルまたはディレクトリの権限設定のためです。
  • 404 Not Foundは指定された位置のリソースを見つけることができませんでした。これもよく使われている応答です。
  • 405 Method Not Allowed要求方法(GET、POST、HEAD、Delete、PUT、TRACEなど)は指定されたリソースに適用されません。(HTTP 1.1新規)
  • 406 Not Accteptableで指定されたリソースはすでに見つかっていますが、そのMIMEタイプとクライアントはAcctヘッダで指定された互換性がありません。
  • 407 Proxy Authentication Requiredは401に類似しています。お客様が先にプロキシサーバーの承認を受けなければならないということです。(HTTP 1.1新規)
  • Request Timeoutは、サーバの許可待ち時間内に、クライアントから何の要求もされていません。クライアントは、同じ要求を後で繰り返すことができます。(HTTP 1.1新規)
  • 409 Conflicktは、通常、PUT要求に関連しています。要求とリソースの現在の状態が衝突しているため、要求は成功しませんでした。(HTTP 1.1新規)
  • 410 Goneによって要求された文書はもう利用できなくなりました。どのアドレスにリダイレクトすべきかサーバが分かりません。407に戻ると、指定された位置から永久にドキュメントが離れていることを表します。404は未知の理由でドキュメントが利用できないことを表します。(HTTP 1.1新規)
  • 411 Length Requiredサーバは要求を処理できません。クライアントがConteet Lengthヘッダを送信しない限り、(HTTP 1.1新規)
  • 412 Prection Failed要求ヘッダで指定されたいくつかの前提条件が失敗しました。
  • 413 Request Entit Too Largeターゲットドキュメントのサイズは、サーバが現在処理したいサイズを超えています。サーバが要求を後で処理できると思ったら、Retry-Afterヘッダ(HTTP 1.1新規)を提供するべきです。
  • .Request URI Too Long URIが長すぎる(HTTP 1.1が新しい)。
  • 416 Requested Range Not Satis fiableサーバは、お客様の要求において指定されたRangeヘッダを満たすことができません。(HTTP 1.1新規)
  • 500 Internal Server Errerサーバが予期せぬ状況にあって、お客様の要求を完了できませんでした。
  • 501 Not Implementedサーバは、要求を実現するために必要な機能をサポートしていません。例えば、サーバがサポートしていないPUT要求をクライアントから送信しました。
  • 502 Bad Gatewayサーバがゲートウェイまたはエージェントとして機能すると、要求を完了するために次のサーバにアクセスするが、サーバは不正な応答を返した。
  • 503 Service Unavailableサーバは、メンテナンスまたは負荷のために応答できませんでした。例えば、Servletはデータベース接続プールが満杯の場合、503に戻ります。サーバが503に戻ると、Retry-Afterヘッダを提供することができます。
  • 504 Gateway Timeoutは、エージェントまたはゲートウェイとしてのサーバによって使用され、リモートサーバからの応答が即時に得られないことを示している。(HTTP 1.1新規)
  • 505 HTTP Verssion Not Supportedサーバは、要求に指定されたHTTPバージョンをサポートしていません。(HTTP 1.1新規)