RESTful Endpoint

Who invented REST?
REST was defined by Roy Fielding, a computer scientist. He presented the REST principles in his PhD dissertation in 2000.

REST 可以看成一種服務(wù)器接口設(shè)計(jì)的模式pattern静稻。它的全稱是 REpresentational State Transfer斜姥。它的意思就是說喇闸,服務(wù)器根據(jù)前端的請求修赞,返回給可展示的資源狀態(tài)。例如你請求了Weibo一個(gè)用戶的信息稚配,那么服務(wù)器就應(yīng)該返回給你一個(gè)user畅涂,包含了姓名,賬號道川,關(guān)注人數(shù)等信息午衰。

相關(guān)名詞

Resource:資源可以是前端想要獲取的任何東西,一張圖片冒萄,一個(gè)文件臊岸,一個(gè)用戶的信息等等。
Collection:一系列的用戶宦言。
URL:Uniform Resource Locator扇单,指向一個(gè)資源的路徑商模。

為什么需要REST

如果在完全沒有系統(tǒng)學(xué)習(xí)過接口設(shè)計(jì)的情況下奠旺,讓你去設(shè)計(jì)一系列接口蜘澜,你會(huì)怎么設(shè)計(jì)?我想大部分人都會(huì)做出如下的設(shè)計(jì):

/addNewUser
/updateUser
/deleteUser
...

你或許會(huì)覺得這樣的設(shè)計(jì)很readable啊响疚,一看就知道是什么意思了鄙信。是的,可讀性或許確實(shí)是它的一個(gè)優(yōu)點(diǎn)忿晕,但同時(shí)不容易去維護(hù)你的接口装诡。原因是你需要想方設(shè)法去像一個(gè)這種名字,接口少的時(shí)候還好践盼,多了呢鸦采?如何解決接口重名的問題。
解決的方法就是舍棄這種依靠命名來分辨接口的辦法咕幻。REST提出了一個(gè)很好的解決辦法渔伯,依靠資源定位符和request方法來分辨要請求的資源以及要進(jìn)行的操作(CRUD)。

Constraints in REST

  1. 在 URL 中只能包含名詞肄程,不能包含動(dòng)詞锣吼,例如/addNewUser應(yīng)該改成 /users。并且名詞都是復(fù)數(shù)蓝厌,不能是單數(shù)玄叠。這很好理解,資源在后臺(tái)數(shù)據(jù)中都不是單個(gè)存在的拓提,就像用戶不可能只有一個(gè)一樣读恃。
  2. 一個(gè)URL動(dòng)作的定義取決于request的方法(GET,POST...)代态。具體請求方法對應(yīng)的含義如下:
    a. GET 用來獲取數(shù)據(jù)狐粱,并且不產(chǎn)生副作用(side effects)。例如 GET: /companies 應(yīng)該獲取所有的公司信息胆数。
    b. POST 用來創(chuàng)建一個(gè)新的Resource肌蜻。post不是一個(gè)冪等操作,也就是說多刺post操作會(huì)產(chǎn)生不一樣的結(jié)果必尼。就如同創(chuàng)建多個(gè)用戶時(shí)蒋搜,每一個(gè)用戶都是不一樣(起碼id是不一樣的)。
    所以使用 POST: /companies 會(huì)創(chuàng)建一個(gè)新的公司判莉。
    c. PUT 用來更新一個(gè)資源豆挽,或者創(chuàng)建一個(gè)資源,如果不存在的話券盅。
    所以 PUT: /companies/Amazon 會(huì)更新Amazon這家公司帮哈,或者先創(chuàng)建Amazon然后更新它。
    put是一個(gè)冪等操作锰镀,意味著多次相同URL的PUT操作只會(huì)產(chǎn)生一樣的效果娘侍。就像更新一個(gè)用戶咖刃,使用相同的信息就算更新一萬次,結(jié)果也是一樣的憾筏。
    d. DELETE 會(huì)從數(shù)據(jù)庫刪除該資源嚎杨。

HTTP Response Status Code

2XX (Success category)

這類Code代表操作成功。

  • 200 OK:標(biāo)準(zhǔn)的成功狀態(tài)氧腰,一般適用于GET枫浙,PUT和POST。
  • 201 Created:當(dāng)新資源創(chuàng)建成功的時(shí)候可以返回這個(gè)狀態(tài)古拴。例如POST箩帚。
  • 204 Not Content:代表操作成功,但沒有需要返回的信息黄痪。例如DELETE膏潮,刪除完成之后不需要返回額外信息了。

3xx (Redirection Category)

  • 304 Not Modified indicates that the client has the response already in its cache. And hence there is no need to transfer the same data again.

4xx (Client Error Category)

These status codes represent that the client has raised a faulty request.

  • 400 Bad Request indicates that the request by the client was not processed, as the server could not understand what the client is asking for.
  • 401 Unauthorized indicates that the client is not allowed to access resources, and should re-request with the required credentials.
  • 403 Forbidden indicates that the request is valid and the client is authenticated, but the client is not allowed access the page or resource for any reason. E.g sometimes the authorized client is not allowed to access the directory on the server.
  • 404 Not Found indicates that the requested resource is not available now.
    410 Gone indicates that the requested resource is no longer available which has been intentionally moved.

5xx (Server Error Category)

  • 500 Internal Server Error indicates that the request is valid, but the server is totally confused and the server is asked to serve some unexpected condition.
  • 503 Service Unavailable indicates that the server is down or unavailable to receive and process the request. Mostly if the server is undergoing maintenance.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末满力,一起剝皮案震驚了整個(gè)濱河市焕参,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌油额,老刑警劉巖叠纷,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異潦嘶,居然都是意外死亡涩嚣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門掂僵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來航厚,“玉大人,你說我怎么就攤上這事锰蓬♂2牵” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵芹扭,是天一觀的道長麻顶。 經(jīng)常有香客問我,道長舱卡,這世上最難降的妖魔是什么辅肾? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮轮锥,結(jié)果婚禮上矫钓,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好新娜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布赵辕。 她就那樣靜靜地躺著,像睡著了一般杯活。 火紅的嫁衣襯著肌膚如雪匆帚。 梳的紋絲不亂的頭發(fā)上熬词,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天旁钧,我揣著相機(jī)與錄音,去河邊找鬼互拾。 笑死歪今,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的颜矿。 我是一名探鬼主播寄猩,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骑疆!你這毒婦竟也來了田篇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤箍铭,失蹤者是張志新(化名)和其女友劉穎泊柬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诈火,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兽赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冷守。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刀崖。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拍摇,靈堂內(nèi)的尸體忽然破棺而出亮钦,到底是詐尸還是另有隱情,我是刑警寧澤充活,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布或悲,位于F島的核電站,受9級特大地震影響堪唐,放射性物質(zhì)發(fā)生泄漏巡语。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一淮菠、第九天 我趴在偏房一處隱蔽的房頂上張望男公。 院中可真熱鬧,春花似錦、人聲如沸枢赔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踏拜。三九已至碎赢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間速梗,已是汗流浹背肮塞。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姻锁,地道東北人枕赵。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像位隶,于是被迫代替她去往敵國和親拷窜。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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