API設(shè)計(jì)一

1 概述

針對(duì)目前項(xiàng)目中使用的前后端分離開發(fā),越來越感覺到API設(shè)計(jì)的重要性,而不好的API設(shè)計(jì)通常讓使用者通過URL無(wú)法明確知道這個(gè)URL到底是干什么用的,并且會(huì)顯得設(shè)計(jì)混亂,在此將使用Restful風(fēng)格設(shè)計(jì)API進(jìn)行總結(jié)袁稽,并對(duì)在SpringBoot中具體實(shí)現(xiàn)Restful API的設(shè)計(jì)給出一定示例。

2 Restful API設(shè)計(jì)

使用Restful API是一種面向資源的設(shè)計(jì)風(fēng)格擒抛,因此我們每一個(gè)URL對(duì)應(yīng)的都是一個(gè)資源推汽。從而針對(duì)資源的操作我們就可以使用HTTP的相應(yīng)的請(qǐng)求方式來進(jìn)行體現(xiàn)。

2.1 版本

應(yīng)該將API的版本號(hào)放入U(xiǎn)RL中歧沪,例如http://localhost:8080/v1/歹撒。

2.2 URL定義為名詞

在之前我們通常看見/addUser诊胞、/editUser這樣的URL定義暖夭,那么如果我們使用這樣的定義就相當(dāng)于我們放棄了HTTP請(qǐng)求方式(GET,POST,PUT,PATCH,DELETE)等的表達(dá)作用。并且我們也知道Restful提倡面向資源的URL路徑撵孤,所以URL使用名詞來進(jìn)行定義迈着,并且URL路徑都是小寫。例如:

操作用戶資源:http://localhost:8080/v1/user邪码,

操作多個(gè)用戶資源:http://localhost:8080/v1/users寥假,

操作財(cái)務(wù)部下的用戶資源:http://localhost:8080/v1/accounting-department/user,從這里我們可以學(xué)到一點(diǎn)霞扬,針對(duì)某個(gè)資源需要兩個(gè)單詞來進(jìn)行表達(dá)的時(shí)候我們可以使用“-”將兩個(gè)單詞連接起來。

2.3 使用HTTP請(qǐng)求方法來表達(dá)對(duì)資源的操作

上面我們知道了Restful API的URL定義是面向資源的,也就是每一個(gè)URL表示的是一種資源喻圃,那我我們要表達(dá)對(duì)資源的相關(guān)操作怎么辦呢萤彩?而且Restful風(fēng)格也強(qiáng)調(diào)了URL必須為名詞構(gòu)成。

這里我們就可以使用HTTP的請(qǐng)求方式來表達(dá)對(duì)資源的操作了斧拍。

GET:獲取資源雀扶。

POST:創(chuàng)建資源。

PUT:修改資源肆汹。

PATCH:修改資源愚墓,這里的修改資源和PUT的區(qū)別在于這里只向后臺(tái)傳遞了修改資源的部分內(nèi)容,而PUT傳遞的是全部?jī)?nèi)容昂勉。

DELETE:刪除資源浪册。

還有兩個(gè)不常用的HTTP動(dòng)詞。
HEAD:獲取資源的元數(shù)據(jù)岗照。
OPTIONS:獲取信息村象,關(guān)于資源的哪些屬性是客戶端可以改變的。

2.4 數(shù)據(jù)傳遞格式

JSON閱讀性更高攒至,擴(kuò)展性更強(qiáng)厚者,適合各種環(huán)境和語(yǔ)言進(jìn)行解析,現(xiàn)在大的互聯(lián)網(wǎng)公司迫吐,對(duì)外提供的API基本都使用JSON库菲。

2.5 使用HTTP狀態(tài)碼

針對(duì)請(qǐng)求的響應(yīng),我們可以直接利用Http的狀態(tài)碼來表達(dá)錯(cuò)誤信息志膀,這樣也可以很形象地得知每次請(qǐng)求的結(jié)果熙宇,而不是每次請(qǐng)求都是200,然后再去響應(yīng)體中獲取是否有錯(cuò)誤信息梧却,這樣響應(yīng)體沒有結(jié)果封裝奇颠,沒有額外的傳輸負(fù)擔(dān)。

針對(duì)Http狀態(tài)碼無(wú)法表示的異常信息放航,我們可以增加自定義異常碼烈拒。增加自定義頭字段,Error-Message 表示錯(cuò)誤信息广鳍,只在出現(xiàn)異常的時(shí)候返回荆几。下面的表格內(nèi)容參考自菜鳥教程。

HTTP狀態(tài)碼共分為5種類型:

分類 分類描述

  • 1** 信息赊时,服務(wù)器收到請(qǐng)求吨铸,需要請(qǐng)求者繼續(xù)執(zhí)行操作
  • 2** 成功,操作被成功接收并處理
  • 3** 重定向祖秒,需要進(jìn)一步的操作以完成請(qǐng)求
  • 4** 客戶端錯(cuò)誤诞吱,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求
  • 5** 服務(wù)器錯(cuò)誤舟奠,服務(wù)器在處理請(qǐng)求的過程中發(fā)生了錯(cuò)誤

HTTP狀態(tài)碼列表:

狀態(tài)碼 狀態(tài)碼英文名稱 中文描述

  • 100 Continue 繼續(xù)》课客戶端應(yīng)繼續(xù)其請(qǐng)求

  • 101 Switching Protocols 切換協(xié)議沼瘫。服務(wù)器根據(jù)客戶端的請(qǐng)求切換協(xié)議。只能切換到更高級(jí)的協(xié)議咙俩,例如耿戚,切換到HTTP的新版本協(xié)議

  • 200 OK 請(qǐng)求成功。一般用于GET與POST請(qǐng)求

  • 201 Created 已創(chuàng)建阿趁。成功請(qǐng)求并創(chuàng)建了新的資源

  • 202 Accepted 已接受膜蛔。已經(jīng)接受請(qǐng)求,但未處理完成

  • 203 Non-Authoritative Information 非授權(quán)信息脖阵。請(qǐng)求成功皂股。但返回的meta信息不在原始的服務(wù)器,而是一個(gè)副本

  • 204 No Content 無(wú)內(nèi)容独撇。服務(wù)器成功處理屑墨,但未返回內(nèi)容。在未更新網(wǎng)頁(yè)的情況下纷铣,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔

  • 205 Reset Content 重置內(nèi)容卵史。服務(wù)器處理成功,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖搜立∫郧可通過此返回碼清除瀏覽器的表單域

  • 206 Partial Content 部分內(nèi)容。服務(wù)器成功處理了部分GET請(qǐng)求

  • 300 Multiple Choices 多種選擇啄踊。請(qǐng)求的資源可包括多個(gè)位置忧设,相應(yīng)可返回一個(gè)資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇

  • 301 Moved Permanently 永久移動(dòng)。請(qǐng)求的資源已被永久的移動(dòng)到新URI颠通,返回信息會(huì)包括新的URI址晕,瀏覽器會(huì)自動(dòng)定向到新URI。今后任何新的請(qǐng)求都應(yīng)使用新的URI代替

  • 302 Found 臨時(shí)移動(dòng)顿锰。與301類似谨垃。但資源只是臨時(shí)被移動(dòng)∨鹂兀客戶端應(yīng)繼續(xù)使用原有URI

  • 303 See Other 查看其它地址刘陶。與301類似。使用GET和POST請(qǐng)求查看

  • 304 Not Modified 未修改牢撼。所請(qǐng)求的資源未修改匙隔,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源熏版》自穑客戶端通常會(huì)緩存訪問過的資源捍掺,通過提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源

  • 305 Use Proxy 使用代理。所請(qǐng)求的資源必須通過代理訪問

  • 306 Unused 已經(jīng)被廢棄的HTTP狀態(tài)碼

  • 307 Temporary Redirect 臨時(shí)重定向碰逸。與302類似乡小。使用GET請(qǐng)求重定向

  • 400 Bad Request 客戶端請(qǐng)求的語(yǔ)法錯(cuò)誤,服務(wù)器無(wú)法理解

  • 401 Unauthorized 請(qǐng)求要求用戶的身份認(rèn)證

  • 402 Payment Required 保留饵史,將來使用

  • 403 Forbidden 服務(wù)器理解請(qǐng)求客戶端的請(qǐng)求,但是拒絕執(zhí)行此請(qǐng)求

  • 404 Not Found 服務(wù)器無(wú)法根據(jù)客戶端的請(qǐng)求找到資源(網(wǎng)頁(yè))胜榔。通過此代碼胳喷,網(wǎng)站設(shè)計(jì)人員可設(shè)置"您所請(qǐng)求的資源無(wú)法找到"的個(gè)性頁(yè)面

  • 405 Method Not Allowed 客戶端請(qǐng)求中的方法被禁止

  • 406 Not Acceptable 服務(wù)器無(wú)法根據(jù)客戶端請(qǐng)求的內(nèi)容特性完成請(qǐng)求

  • 407 Proxy Authentication Required 請(qǐng)求要求代理的身份認(rèn)證,與401類似夭织,但請(qǐng)求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán)

  • 408 Request Time-out 服務(wù)器等待客戶端發(fā)送的請(qǐng)求時(shí)間過長(zhǎng)吭露,超時(shí)

  • 409 Conflict 服務(wù)器完成客戶端的PUT請(qǐng)求是可能返回此代碼,服務(wù)器處理請(qǐng)求時(shí)發(fā)生了沖突

  • 410 Gone 客戶端請(qǐng)求的資源已經(jīng)不存在尊惰。410不同于404讲竿,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設(shè)計(jì)人員可通過301代碼指定資源的新位置

  • 411 Length Required 服務(wù)器無(wú)法處理客戶端發(fā)送的不帶Content-Length的請(qǐng)求信息

  • 412 Precondition Failed 客戶端請(qǐng)求信息的先決條件錯(cuò)誤

  • 413 Request Entity Too Large 由于請(qǐng)求的實(shí)體過大弄屡,服務(wù)器無(wú)法處理题禀,因此拒絕請(qǐng)求。為防止客戶端的連續(xù)請(qǐng)求膀捷,服務(wù)器可能會(huì)關(guān)閉連接迈嘹。如果只是服務(wù)器暫時(shí)無(wú)法處理,則會(huì)包含一個(gè)Retry-After的響應(yīng)信息

  • 414 Request-URI Too Large 請(qǐng)求的URI過長(zhǎng)(URI通常為網(wǎng)址)全庸,服務(wù)器無(wú)法處理

  • 415 Unsupported Media Type 服務(wù)器無(wú)法處理請(qǐng)求附帶的媒體格式

  • 416 Requested range not satisfiable 客戶端請(qǐng)求的范圍無(wú)效

  • 417 Expectation Failed 服務(wù)器無(wú)法滿足Expect的請(qǐng)求頭信息

  • 500 Internal Server Error 服務(wù)器內(nèi)部錯(cuò)誤秀仲,無(wú)法完成請(qǐng)求

  • 501 Not Implemented 服務(wù)器不支持請(qǐng)求的功能,無(wú)法完成請(qǐng)求

  • 502 Bad Gateway 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器神僵,從遠(yuǎn)端服務(wù)器接收到了一個(gè)無(wú)效的請(qǐng)求

  • 503 Service Unavailable 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無(wú)法處理客戶端的請(qǐng)求覆劈。延時(shí)的長(zhǎng)度可包含在服務(wù)器的Retry-After頭信息中

  • 504 Gateway Time-out 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器保礼,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請(qǐng)求

  • 505 HTTP Version not supported 服務(wù)器不支持請(qǐng)求的HTTP協(xié)議的版本,無(wú)法完成處理


作者:ONROAD0612
來源:CSDN
原文:https://blog.csdn.net/ONROAD0612/article/details/82216015
版權(quán)聲明:本文為博主原創(chuàng)文章墩崩,轉(zhuǎn)載請(qǐng)附上博文鏈接氓英!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鹦筹,隨后出現(xiàn)的幾起案子铝阐,更是在濱河造成了極大的恐慌,老刑警劉巖铐拐,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徘键,死亡現(xiàn)場(chǎng)離奇詭異练对,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吹害,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門螟凭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人它呀,你說我怎么就攤上這事螺男。” “怎么了纵穿?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵下隧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我谓媒,道長(zhǎng)淆院,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任句惯,我火速辦了婚禮土辩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抢野。我一直安慰自己拷淘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布蒙保。 她就那樣靜靜地躺著辕棚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邓厕。 梳的紋絲不亂的頭發(fā)上逝嚎,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音详恼,去河邊找鬼补君。 笑死,一個(gè)胖子當(dāng)著我的面吹牛昧互,可吹牛的內(nèi)容都是我干的挽铁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼敞掘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼叽掘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起玖雁,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤更扁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浓镜,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溃列,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幸乒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出雅任,到底是詐尸還是另有隱情,我是刑警寧澤咨跌,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布椿访,位于F島的核電站,受9級(jí)特大地震影響虑润,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜加酵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一拳喻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猪腕,春花似錦冗澈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至腐缤,卻和暖如春捌归,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岭粤。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工惜索, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剃浇。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓巾兆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親虎囚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子角塑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • API定義規(guī)范 本規(guī)范設(shè)計(jì)基于如下使用場(chǎng)景: 請(qǐng)求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請(qǐng)求頻率非常高,建議使用雙通...
    有涯逐無(wú)涯閱讀 2,557評(píng)論 0 6
  • 一說到REST淘讥,我想大家的第一反應(yīng)就是“啊圃伶,就是那種前后臺(tái)通信方式。”但是在要求詳細(xì)講述它所提出的各個(gè)約束留攒,以及如...
    時(shí)待吾閱讀 3,433評(píng)論 0 19
  • 筆記 RESTful架構(gòu)風(fēng)格概述 RESTful架構(gòu)風(fēng)格 RESTful架構(gòu)風(fēng)格最初由Roy T. Fieldin...
    plutoese閱讀 12,659評(píng)論 3 58
  • 天蓬被貶下凡塵煤惩,冷炙殘羹睡安穩(wěn)。 世人嘲諷渾不怕炼邀,喧囂穢土保本真魄揉。
    羽佳成長(zhǎng)故事閱讀 138評(píng)論 0 0
  • 讀之前可不曾想過這竟然是一本短篇小說。十篇小說拭宁,四篇自傳洛退,讀起來倒是引人入勝,有些越讀越精彩的感覺杰标。書中到處...
    辮兒媽閱讀 3,241評(píng)論 0 1