前言
今天在對接一個接口時,客戶將DELETED請求設(shè)置了body參數(shù),導(dǎo)致一個功能反復(fù)搞了半天,今天就來說下這兩者的區(qū)別。
1、HTTP概述
HTTP(HyperText Transfer Protocol)是一種用于從WWW(萬維網(wǎng))服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議。它使得瀏覽器可以更加高效地工作,同時減少網(wǎng)絡(luò)傳輸量。HTTP采用了請求/響應(yīng)模型,客戶端向服務(wù)器發(fā)送一個請求,服務(wù)器返回相應(yīng)的響應(yīng)。這種通信過程包括以下幾個關(guān)鍵環(huán)節(jié):
請求消息(Request Message):由請求行、請求頭、空行和消息體組成。請求行包括HTTP方法、URL和HTTP版本。
響應(yīng)消息(Response Message):由狀態(tài)行、響應(yīng)頭、空行和響應(yīng)體組成。狀態(tài)行包括HTTP版本、狀態(tài)碼和原因短語。
常見的HTTP方法包括:
GET:用于請求資源
POST:用于提交數(shù)據(jù)
PUT:用于更新資源
DELETE:用于刪除資源
HTTP是無狀態(tài)的協(xié)議,即每個請求都是獨立的,服務(wù)器不會保存任何請求的狀態(tài)信息。
2、RESTful概述
RESTful(Representational State Transfer)是一種軟件架構(gòu)風格,主要用于設(shè)計網(wǎng)絡(luò)應(yīng)用的API。它基于以下幾個原則:
資源(Resources):RESTful以資源為中心,資源通過URI(統(tǒng)一資源標識符)進行標識。
統(tǒng)一接口(Uniform Interface):RESTful API通過一組標準的HTTP方法(GET、POST、PUT、DELETE)對資源進行操作。
無狀態(tài)(Stateless):每個請求都包含了處理該請求所需的全部信息,服務(wù)器不會在請求之間保存任何狀態(tài)。
緩存(Cacheable):響應(yīng)應(yīng)該明確標記為可緩存或不可緩存,以提高客戶端的效率。
RESTful設(shè)計風格使得API更具一致性和可維護性,同時利用HTTP協(xié)議的標準特性來簡化網(wǎng)絡(luò)應(yīng)用的開發(fā)。
3、HTTP與RESTful的主要區(qū)別
URL表達形式不同:
請求方法不同:
數(shù)據(jù)傳輸格式不同:
資源定義不同:
4、詳細對比分析
4.1請求方法
HTTP接口調(diào)用可以使用各種HTTP方法,而RESTful嚴格限定了方法的使用場景。例如,GET方法僅用于獲取資源,POST方法用于創(chuàng)建資源,PUT方法用于更新資源,DELETE方法用于刪除資源。這種規(guī)范化的設(shè)計提高了API的清晰度和一致性。
需要特別指出的是,在標準的請求中,GET和DELETE方法是不能往body里面?zhèn)鲄?shù)的。這是因為GET方法主要用于請求資源,而不是發(fā)送數(shù)據(jù),DELETE方法用于刪除資源,因此也不需要在body中傳遞參數(shù)。
4.2 數(shù)據(jù)傳輸格式
HTTP接口調(diào)用的數(shù)據(jù)格式可以是form、json、xml等多種形式,而RESTful更傾向于使用JSON或XML。這種統(tǒng)一的數(shù)據(jù)格式使得客戶端和服務(wù)器之間的數(shù)據(jù)交換更為一致和高效。
4.3 資源定義
HTTP接口調(diào)用不依賴于具體的資源定義,而RESTful強調(diào)資源和API請求的對應(yīng)關(guān)系。每個資源在RESTful API中都有一個唯一的URI,通過標準的HTTP方法對這些資源進行操作,使得API設(shè)計更加直觀和結(jié)構(gòu)化。
5、其他特點
5.1 資源標準化
RESTful是基于HTTP協(xié)議的,HTTP協(xié)議定義的URL必須符合URI(Uniform Resource Identifier)標準。URI由協(xié)議、主機、資源路徑、查詢字符串和片段組成。因此,RESTful要求每個資源都有一個唯一的標識符URI,這使得資源的管理更加標準化和系統(tǒng)化。
5.2 無狀態(tài)
因為HTTP是一種無狀態(tài)協(xié)議,所以RESTful也是無狀態(tài)的。即服務(wù)器不會保存任何客戶端請求的歷史信息。每個請求都是獨立的,服務(wù)器不會在請求之間保留會話狀態(tài)。這種無狀態(tài)性簡化了服務(wù)器的設(shè)計,同時也增強了系統(tǒng)的可擴展性和可靠性。
5.3 緩存機制
由于RESTful是基于HTTP標準定義的,因此具有HTTP緩存機制。客戶端可以在收到數(shù)據(jù)后將其存儲在本地緩存中,在下一次請求相同資源時可以減少網(wǎng)絡(luò)傳輸,提高性能。這種緩存機制可以顯著提高應(yīng)用的響應(yīng)速度和用戶體驗。
5.4 GET和DELETE請求的限制
在標準的HTTP請求中,GET和DELETE方法是不能往body里面?zhèn)鲄?shù)的。GET方法主要用于請求資源,而不是發(fā)送數(shù)據(jù),DELETE方法用于刪除資源,因此這兩種方法都不需要在body中傳遞參數(shù)。GET請求的參數(shù)通常附加在URL中,而DELETE請求通常只需要URI來標識需要刪除的資源。那么有標準就有魔改,有些依賴包就會提供,但是這是一個不好的習慣,還是建議大家你不要這么玩
6、總結(jié)
RESTful是HTTP接口調(diào)用的一種特殊實現(xiàn),遵循REST架構(gòu)風格的規(guī)范,能夠提供更加標準化、統(tǒng)一化、可讀性和易用性的API設(shè)計。與傳統(tǒng)的HTTP接口調(diào)用相比,RESTful調(diào)用具有更加清晰明了、易于理解和維護的API設(shè)計,擴展性和靈活性也更強。在現(xiàn)代Web應(yīng)用開發(fā)中,理解和使用RESTful架構(gòu)風格能夠大大提高開發(fā)效率和應(yīng)用的可維護性。
更多介紹:
1、什么是RestfulAPI?
1、REST直接翻譯:表現(xiàn)層狀態(tài)轉(zhuǎn)移,實質(zhì)就是一種面向資源編程的方法
2、REST描述的是在網(wǎng)絡(luò)中client和server的一種交互形式;REST本身不實用,實用的是如何設(shè)計 RESTful API(REST風格的網(wǎng)絡(luò)接口)
3、RestfulAPI中認為網(wǎng)絡(luò)上所有的東西都是一種資源,對這些資源操作時無非就是增刪改查
4、網(wǎng)絡(luò)上的資源一般都用一段url代替,比如:http://www.chnsys.com/asset 代替資產(chǎn)資源
5、根據(jù)發(fā)送請求的method方法判斷如何操作這些資源
GET(SELECT): 從服務(wù)器取出資源(一項或多項)。
POST(CREATE): 在服務(wù)器新建一個資源。
PUT(UPDATE): 在服務(wù)器更新資源(客戶端提供改變后的完整資源)。
DELETE(DELETE): 從服務(wù)器刪除資源。
PATCH(UPDATE): 在服務(wù)器更新資源(客戶端提供改變的屬性)。
2、HTTP的第一行包含三個信息:謂詞、URL、HTTP協(xié)議版本,三個數(shù)據(jù)使用空格隔開。
POST http://comet.chouti.com/comet/connect HTTP/1.1
2.1、謂詞(POST)
1. WEB API就是使用謂詞作為默認的路由方式,最常用的謂詞有:POST\DELETE\PUT\GET,這四個謂詞對應(yīng)了“增、刪、改、查”四個動作
2. 其中,GET,DELETE不包含BODY,PUT,POST可以包含BODY
2.2、URl
1. 網(wǎng)絡(luò)上的資源一般都用一段url代替,比如:http://www.chnsys.com/asset 代替資產(chǎn)資源
2.3、HTTP協(xié)議版本
1. HTTP的第一行內(nèi)容就是這些: POST http://comet.chouti.com/comet/connect HTTP/1.1
2. 接下來會有一個\r\n來進行換行,接下來就是HTTP HEAD部分,HTTP HEAD描述了HTTP請求和響應(yīng)。
3. HTTP HEAD即為HTTP協(xié)議中最重要的部分,他包含了編碼、BODY長度、內(nèi)容協(xié)商等信息,你也可以包含一些自定義信息
3、RestFul API中常用的HEAD信息
1. User-Agent:用戶代理,是什么客戶端發(fā)出的請求,如IE、Chrome、Fiddler等
2. HOST:域名
3. Authorization:驗證信息
4. Accept:接受何種序列化方式返回的數(shù)據(jù),用MIME表示,用于對響應(yīng)數(shù)據(jù)的內(nèi)容協(xié)商,
可以包含多個MIME,按優(yōu)先順序排列,如application/json,application/xml,text/html
5. Content-Type:使用一個MIME表示,表示所發(fā)送請求的Body的序列化方式,常見的如application/json,
還有WEB交互最常使用的application/x-www-form-urlencoded,都表示了你的body部分的序列化方式,在請求、響應(yīng)中都會出現(xiàn)
6. HTTP HEAD部分是HTTP協(xié)議中最核心的部分,可配置向非常多這里就不列舉了
7. 響應(yīng)部分也分為頭部和Body,響應(yīng)頭部和請求頭部最大的不同在于響應(yīng)首行存在一個HTTP Code
HTTP Code作為API的調(diào)用狀態(tài)的展示,也很重要,在REST API中最常用的狀態(tài)碼一般為2XX,4XX,5XX三個段
8. 在首部之后有一個空行(\r\n)接下來就是Content,這里有具體的業(yè)務(wù)數(shù)據(jù),根據(jù)不同的Content-Type使用不同的序列化方式表示,例如JSON,XML,甚至HTML
4、用一張圖為大家展示一下這些知識

該文章在 2024/8/26 16:04:33 編輯過