接口設(shè)計和響應(yīng)碼參考

項目響應(yīng)參照http定義的響應(yīng)碼,成功條件下直接返回請求內(nèi)容.無內(nèi)容返回204.所有失敗直接拋出異常,系統(tǒng)在使用統(tǒng)一的異常處理,對于json請求返回json,非json返回對應(yīng)的錯誤頁面.

在項目中,發(fā)生的任何需要返回非200開頭的響應(yīng)的時候,均直接拋出一個http異常.項目中有統(tǒng)一的異常處理中心,異常處理中心作統(tǒng)一化處理,比如最基本的,json請求響應(yīng)json,非json請求響應(yīng)頁面.需要根據(jù)自己的業(yè)務(wù)定制各種異常,比如資源類錯誤ResourceException(繼承自HttpException).然后StoreResourceFailedException繼承自ResourceException.設(shè)計各種異常,在業(yè)務(wù)代碼中需要返回錯誤的時候,直接throw一個異常就好了,十分方便清晰.

響應(yīng)

響應(yīng)使用json,遵照http標(biāo)準(zhǔn).

成功

200(包括其他200開頭的響應(yīng)碼)時直接返回請求結(jié)果;
204,表示無內(nèi)容的成功響應(yīng),會執(zhí)行success回調(diào),但是沒有data數(shù)據(jù).

失敗

發(fā)生錯誤全部使用http異常響應(yīng).
錯誤信息包含在響應(yīng)體中的error字段中.
(如ajax請求獲取:XMLHttpRequest.responseJSON.error).

關(guān)于 422 響應(yīng)碼
對于422驗證失敗的錯誤,在一些情況下響應(yīng)體中是不返回error字段的.
響應(yīng)返回的是key-value形式的鍵值對,key表示錯誤字段,value表示錯誤原因.比如返回:"["name"=>"名稱 不能為空","mobile"=>"手機號 不能為空"]"


例子

在ajax請求中的error中處理錯誤:

error: function (XMLHttpRequest, textStatus, errorThrown) {
        var msg=""; 
        if(XMLHttpRequest.status == 401){
              //未授權(quán),刨除編碼錯誤導(dǎo)致的401.
              //對于微信端可能是token失效,需要通過授權(quán)中心重新獲得token
        }
        if (XMLHttpRequest.responseJSON && XMLHttpRequest.responseJSON.error) {
            //后臺有專門返回的錯誤信息的情況
            msg += XMLHttpRequest.responseJSON.error;
        } else {
            //如果沒有響應(yīng)中沒有error
            if (XMLHttpRequest.status == 422) {
                //422 響應(yīng)可能返回數(shù)組形式錯誤信息.如:["name"=>"名稱 不能為空","mobile"=>"手機號 不能為空"]
                var erroMsg = JSON.parse(XMLHttpRequest.responseText);
                $.each(erroMsg, function (k, v) {
                    msg += v[0] + "\\n";
                });
            } else {
                //其他
                msg += XMLHttpRequest.statusText + ":" + XMLHttpRequest.status;
            }
        }
        //拿著msg做出提示
}

詳細(xì)介紹

響應(yīng)碼由三位十進制數(shù)字組成,它們出現(xiàn)在由HTTP服務(wù)器發(fā)送的響應(yīng)的第一行趾撵。

響應(yīng)碼分五種類型侄柔,由它們的第一位數(shù)字表示:

1xx:信息,請求收到占调,繼續(xù)處理 
2xx:成功暂题,行為被成功地接受、理解和采納 
3xx:重定向究珊,為了完成請求薪者,必須進一步執(zhí)行的動作 
4xx:客戶端錯誤,請求包含語法錯誤或者請求無法實現(xiàn) 
5xx:服務(wù)器錯誤剿涮,服務(wù)器不能實現(xiàn)一種明顯無效的請求

    100 => 'Continue', //繼續(xù) 
    101 => 'Switching Protocols', //分組交換協(xié)議 
    102 => 'Processing',             // RFC2518
    200 => 'OK',
    201 => 'Created',                 //被創(chuàng)建 
    202 => 'Accepted',              //被采納 
    203 => 'Non-Authoritative Information',  //非授權(quán)信息 
    204 => 'No Content',   //無內(nèi)容 
    205 => 'Reset Content',    //重置內(nèi)容 
    206 => 'Partial Content',  //部分內(nèi)容 
    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',   //未授權(quán) 
    402 => 'Payment Required',  //要求付費 
    403 => 'Forbidden',   //禁止 
    404 => 'Not Found',   //未找到 
    405 => 'Method Not Allowed',   //不允許的方法 
    406 => 'Not Acceptable',   //不被采納 
    407 => 'Proxy Authentication Required',   //要求代理授權(quán) 
    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',     //失敗的預(yù)期 
    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',   //內(nèi)部服務(wù)器錯誤 
    501 => 'Not Implemented',   //未被使用 
    502 => 'Bad Gateway',     //網(wǎng)關(guān)錯誤 
    503 => 'Service Unavailable',   //不可用的服務(wù)/維護
    504 => 'Gateway Timeout',   //網(wǎng)關(guān)超時 
    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

部分響應(yīng)碼詳細(xì)介紹

了解更多請參考:http響應(yīng)碼

  • 100 Continue 初始的請求已經(jīng)接受,客戶應(yīng)當(dāng)繼續(xù)發(fā)送請求的其余部分取试。(HTTP 1.1新)
  • 101 Switching Protocols 服務(wù)器將遵從客戶的請求轉(zhuǎn)換到另外一種協(xié)議(HTTP 1.1新)
  • 200 OK 一切正常悬槽,對GET和POST請求的應(yīng)答文檔跟在后面。
  • 201 Created 服務(wù)器已經(jīng)創(chuàng)建了文檔瞬浓,Location頭給出了它的URL初婆。
  • 202 Accepted 已經(jīng)接受請求,但處理尚未完成。
  • 203 Non-Authoritative Information 文檔已經(jīng)正常地返回烟逊,但一些應(yīng)答頭可能不正確渣窜,因為使用的是文檔的拷貝(HTTP 1.1新)。
  • 204 No Content 沒有新文檔宪躯,瀏覽器應(yīng)該繼續(xù)顯示原來的文檔乔宿。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新访雪,這個狀態(tài)代碼是很有用的详瑞。
  • 205 Reset Content 沒有新的內(nèi)容,但瀏覽器應(yīng)該重置它所顯示的內(nèi)容臣缀。用來強制瀏覽器清除表單輸入內(nèi)容(HTTP 1.1新)坝橡。
  • 206 Partial Content 客戶發(fā)送了一個帶有Range頭的GET請求,服務(wù)器完成了它(HTTP 1.1新)精置。
  • 300 Multiple Choices 客戶請求的文檔可以在多個位置找到计寇,這些位置已經(jīng)在返回的文檔內(nèi)列出。如果服務(wù)器要提出優(yōu)先選擇脂倦,則應(yīng)該在Location應(yīng)答頭指明番宁。
  • 301 Moved Permanently 客戶請求的文檔在其他地方,新的URL在Location頭中給出赖阻,瀏覽器應(yīng)該自動地訪問新的URL蝶押。
  • 302 Found 類似于301,但新的URL應(yīng)該被視為臨時性的替代火欧,而不是永久性的棋电。注意,在HTTP1.0中對應(yīng)的狀態(tài)信息是“Moved Temporatily”. 出現(xiàn)該狀態(tài)代碼時苇侵,瀏覽器能夠自動訪問新的URL赶盔,因此它是一個很有用的狀態(tài)代碼。 注意這個狀態(tài)代碼有時候可以和301替換使用榆浓。例如招刨,如果瀏覽器錯誤地請求http://host/~user(缺少了后面的斜杠),有的服務(wù)器返回301哀军,有的則返回302。嚴(yán)格地說打却,我們只能假定只有當(dāng)原來的請求是GET時瀏覽器才會自動重定向杉适。請參見307。
  • 303 See Other 類似于301/302柳击,不同之處在于猿推,如果原來的請求是POST,Location頭指定的重定向目標(biāo)文檔應(yīng)該通過GET提取(HTTP 1.1新)蹬叭。
  • 304 Not Modified 客戶端有緩沖的文檔并發(fā)出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)藕咏。服務(wù)器告訴客戶,原來緩沖的文檔還可以繼續(xù)使用秽五。
  • 305 Use Proxy 客戶請求的文檔應(yīng)該通過Location頭所指明的代理服務(wù)器提饶醪椤(HTTP 1.1新)。
  • 307 Temporary Redirect 和302(Found)相同坦喘。許多瀏覽器會錯誤地響應(yīng)302應(yīng)答進行重定向盲再,即使原來的請求是POST,即使它實際上只能在POST請求的應(yīng)答是303時 才能重定向瓣铣。由于這個原因答朋,HTTP 1.1新增了307,以便更加清除地區(qū)分幾個狀態(tài)代碼:當(dāng)出現(xiàn)303應(yīng)答時棠笑,瀏覽器可以跟隨重定向的GET和POST請求梦碗;如果是307應(yīng)答,則瀏覽器只 能跟隨對GET請求的重定向蓖救。(HTTP 1.1新)
  • 400 Bad Request 請求出現(xiàn)語法錯誤洪规。
  • 401 Unauthorized 客戶試圖未經(jīng)授權(quán)訪問受密碼保護的頁面。應(yīng)答中會包含一個WWW-Authenticate頭藻糖,瀏覽器據(jù)此顯示用戶名字/密碼對話框淹冰,然后在填寫合適的Authorization頭后再次發(fā)出請求。
  • 403 Forbidden 資源不可用巨柒。服務(wù)器理解客戶的請求樱拴,但拒絕處理它。通常由于服務(wù)器上文件或目錄的權(quán)限設(shè)置導(dǎo)致洋满。
  • 404 Not Found 無法找到指定位置的資源晶乔。這也是一個常用的應(yīng)答。
  • 405 Method Not Allowed 請求方法(GET牺勾、POST正罢、HEAD、Delete驻民、PUT翻具、TRACE等)對指定的資源不適用。(HTTP 1.1新)
  • 406 Not Acceptable 指定的資源已經(jīng)找到回还,但它的MIME類型和客戶在Accpet頭中所指定的不兼容(HTTP 1.1新)裆泳。
  • 407 Proxy Authentication Required 類似于401,表示客戶必須先經(jīng)過代理服務(wù)器的授權(quán)柠硕。(HTTP 1.1新)
  • 408 Request Timeout 在服務(wù)器許可的等待時間內(nèi)工禾,客戶一直沒有發(fā)出任何請求运提。客戶可以在以后重復(fù)同一請求闻葵。(HTTP 1.1新)
  • 409 Conflict 通常和PUT請求有關(guān)民泵。由于請求和資源的當(dāng)前狀態(tài)相沖突,因此請求不能成功槽畔。(HTTP 1.1新)
  • 410 Gone 所請求的文檔已經(jīng)不再可用栈妆,而且服務(wù)器不知道應(yīng)該重定向到哪一個地址。它和404的不同在于竟痰,返回407表示文檔永久地離開了指定的位置签钩,而404表示由于未知的原因文檔不可用。(HTTP 1.1新)
  • 411 Length Required 服務(wù)器不能處理請求坏快,除非客戶發(fā)送一個Content-Length頭铅檩。(HTTP 1.1新)
  • 412 Precondition Failed 請求頭中指定的一些前提條件失敗(HTTP 1.1新)莽鸿。
  • 413 Request Entity Too Large 目標(biāo)文檔的大小超過服務(wù)器當(dāng)前愿意處理的大小昧旨。如果服務(wù)器認(rèn)為自己能夠稍后再處理該請求,則應(yīng)該提供一個Retry-After頭(HTTP 1.1新)祥得。
  • 414 Request URI Too Long URI太長(HTTP 1.1新)兔沃。
  • 416 Requested Range Not Satisfiable 服務(wù)器不能滿足客戶在請求中指定的Range頭。(HTTP 1.1新)
  • 500 Internal Server Error 服務(wù)器遇到了意料不到的情況级及,不能完成客戶的請求乒疏。
  • 501 Not Implemented 服務(wù)器不支持實現(xiàn)請求所需要的功能。例如饮焦,客戶發(fā)出了一個服務(wù)器不支持的PUT請求怕吴。
  • 502 Bad Gateway 服務(wù)器作為網(wǎng)關(guān)或者代理時,為了完成請求訪問下一個服務(wù)器县踢,但該服務(wù)器返回了非法的應(yīng)答转绷。
  • 503 Service Unavailable 服務(wù)器由于維護或者負(fù)載過重未能應(yīng)答。例如硼啤,Servlet可能在數(shù)據(jù)庫連接池已滿的情況下返回503议经。服務(wù)器返回503時可以提供一個Retry-After頭。
  • 504 Gateway Timeout 由作為代理或網(wǎng)關(guān)的服務(wù)器使用谴返,表示不能及時地從遠(yuǎn)程服務(wù)器獲得應(yīng)答煞肾。(HTTP 1.1新)
  • 505 HTTP Version Not Supported 服務(wù)器不支持請求中所指明的HTTP版本。(HTTP 1.1新)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗓袱,一起剝皮案震驚了整個濱河市扯旷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌索抓,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逼肯,居然都是意外死亡耸黑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門篮幢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大刊,“玉大人,你說我怎么就攤上這事三椿∪本” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵搜锰,是天一觀的道長伴郁。 經(jīng)常有香客問我,道長蛋叼,這世上最難降的妖魔是什么焊傅? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮狈涮,結(jié)果婚禮上狐胎,老公的妹妹穿的比我還像新娘。我一直安慰自己歌馍,他們只是感情好握巢,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著松却,像睡著了一般暴浦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玻褪,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天肉渴,我揣著相機與錄音,去河邊找鬼带射。 笑死同规,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窟社。 我是一名探鬼主播券勺,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灿里!你這毒婦竟也來了关炼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤匣吊,失蹤者是張志新(化名)和其女友劉穎儒拂,沒想到半個月后寸潦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡社痛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年见转,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒜哀。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡斩箫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出撵儿,到底是詐尸還是另有隱情乘客,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布淀歇,位于F島的核電站易核,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏房匆。R本人自食惡果不足惜耸成,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浴鸿。 院中可真熱鬧井氢,春花似錦、人聲如沸岳链。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掸哑。三九已至约急,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苗分,已是汗流浹背厌蔽。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摔癣,地道東北人奴饮。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像择浊,于是被迫代替她去往敵國和親戴卜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理琢岩,服務(wù)發(fā)現(xiàn)投剥,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • API定義規(guī)范 本規(guī)范設(shè)計基于如下使用場景: 請求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請求頻率非常高担孔,建議使用雙通...
    有涯逐無涯閱讀 2,521評論 0 6
  • 一江锨、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,333評論 6 152
  • 跟浩子在家搭摩托車模型吃警,拆了裝,裝了拆泳桦,直到組裝完畢汤徽。我們都說,小孩子獲取快樂的成本特別低灸撰,一個玩具就能快樂一整天...
    賣小妞的餅干閱讀 282評論 0 0
  • 黑白本是一色,有了此才生成了彼拼坎。 網(wǎng)絡(luò)解構(gòu)的不單單是空間浮毯,還毫不留情的禍害了時間。 時間已經(jīng)被你壓縮的不成樣子泰鸡,為...
    七色黑白閱讀 247評論 0 1