RESTful web服務(wù)在設(shè)計(jì)上非常依賴于HTTP。通過(guò)使用不同的HTTP方法來(lái)完成工作,使用HTTP的響應(yīng)代碼來(lái)同時(shí)用戶一個(gè)請(qǐng)求是否成功。RESTful表示Representational State tranfer,使用HTTP來(lái)實(shí)現(xiàn)兩個(gè)系統(tǒng)之間通信。RESTful web服務(wù)是一些指向資源的URI(統(tǒng)一資源標(biāo)識(shí)符)的集合。這些URI可以指向一個(gè)資源或者多個(gè)資源的集合。比如說(shuō),/employee/101包含的是員工101的詳細(xì)信息,而/employees會(huì)返回所有員工的列表。在RESTful web服務(wù)中,HTTP請(qǐng)求類型表示要對(duì)資源進(jìn)行的操作。
例如:
使用HTTP GET請(qǐng)求訪問(wèn)/employee/101,可以取回該用戶的詳細(xì)信息。
使用POST請(qǐng)求訪問(wèn)/employee/102,將會(huì)創(chuàng)建一個(gè)ID為102的新員工。、使用PUT請(qǐng)求訪問(wèn)/employee/101,可以用來(lái)更新員工101的信息。
使用DELETE請(qǐng)求訪問(wèn)/employee/101,可以刪除ID為101的員工的數(shù)據(jù)。
在使用PUT和POST請(qǐng)求的時(shí)候,具體的數(shù)據(jù)將會(huì)包含在請(qǐng)求體中。
Purpose of HTTP Request in RESTful WebService
當(dāng)使用RESTful web服務(wù)的時(shí)候,每一種HTTP請(qǐng)求方法的含義如下:
GET
從服務(wù)器取回?cái)?shù)據(jù)(只是取回?cái)?shù)據(jù),而不會(huì)產(chǎn)生其他的影響)。這是一個(gè)冪等的方法(譯者注:使用相同的參數(shù)重復(fù)執(zhí)行,應(yīng)該能夠獲取到相同的結(jié)果)。下面是一個(gè)使用GET請(qǐng)求從服務(wù)器獲取id為123的書(shū)的例子:
GET /books/123
POST
POST請(qǐng)求通常用來(lái)創(chuàng)建一個(gè)實(shí)體,也就是一個(gè)沒(méi)有ID的資源。一旦這個(gè)請(qǐng)求成功執(zhí)行了,就會(huì)在HTTP請(qǐng)求的響應(yīng)中,返回這個(gè)新創(chuàng)建的實(shí)體的id。我們通常用它來(lái)上傳文件或者表單。
比如,下面這個(gè)URL將會(huì)在服務(wù)器上創(chuàng)建一本新書(shū):
POST /books/
PUT
PUT請(qǐng)求和POST請(qǐng)求類似,但是一般用來(lái)更新一個(gè)已有的實(shí)體。通過(guò)把已經(jīng)存在的資源的ID和新的實(shí)體用PUT請(qǐng)求上傳的服務(wù)器,來(lái)更新資源。
比如,下面這個(gè)URL將會(huì)替換掉服務(wù)器上的ID為123的書(shū):
PUT /books/123
可以參考Leonard Richardson, Sam Ruby, and David Heinemeier Hansson寫(xiě)的RESTful Web Services,來(lái)了解RESTful API中什么時(shí)候該使用PUT和POST。
DELETE
DELETE方法用來(lái)從服務(wù)器上刪除資源。和PUT類似,你需要把要?jiǎng)h除的資源的ID上傳給服務(wù)器。
比如下面這個(gè)URL可以用來(lái)刪除服務(wù)器上ID為123的書(shū):
DELETE /books/123
TRACE
提供一種方法來(lái)測(cè)試當(dāng)一個(gè)請(qǐng)求發(fā)生的時(shí)候,服務(wù)器通過(guò)網(wǎng)絡(luò)收到的內(nèi)容。所以,它會(huì)返回你發(fā)送的內(nèi)容。
HEAD
HEAS請(qǐng)求和GET請(qǐng)求資源類似,但是僅僅返回響應(yīng)的頭部(沒(méi)有具體的響應(yīng)體)。同時(shí),和GET請(qǐng)求類似,HEAD也是冪等的,不會(huì)在服務(wù)器上造成其他影響。
OPTIONS
OPTIONS方法允許客戶端請(qǐng)求一個(gè)服務(wù)所支持的請(qǐng)求方法。它所對(duì)應(yīng)的響應(yīng)頭(response header)是Allow, 它非常簡(jiǎn)單地列出了支持的方法。
(以下例子為譯者添加)
比如:
200 OK
Allow: HEAD,GET,PUT,DELETE,OPTIONS
CONNECT
主要用來(lái)建立一個(gè)對(duì)資源的網(wǎng)絡(luò)連接(通常請(qǐng)求一些能夠把HTTP連接轉(zhuǎn)發(fā)成為T(mén)CP連接并保持的代理)。一旦建立連接后,會(huì)響應(yīng)一個(gè)200狀態(tài)碼和一條“Connection Established”的消息。
下面這張圖展示了在RESTful web服務(wù)中,不同的HTTP方法的用法:

以上就是在RESTful web服務(wù)中不同HTTP請(qǐng)求類型的含義,不管是在Java中還是在其他技術(shù)中。最重要的是理解PUT和POST之間的區(qū)別,盡管PUT和POST都可以用來(lái)創(chuàng)建和更新實(shí)體,但是通常更傾向于使用POST來(lái)創(chuàng)建,而使用PUT來(lái)更新已存在的實(shí)體。
感謝您的閱讀!
本賬號(hào)已經(jīng)不再更新,更多文章請(qǐng)移步我的個(gè)人博客https://www.zacharyjia.me