久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 如何理解RESTful API的冪等性?

如何理解RESTful API的冪等性?

來源:千鋒教育
發(fā)布人:qyf
時(shí)間: 2022-08-03 11:40:00 1659498000

如何理解 RESTful API 的冪等性

  1. 什么是冪等性?

  HTTP 冪等方法,是指無論調(diào)用多少次都不會(huì)有不同結(jié)果的 HTTP 方法。不管你調(diào)用一次,還是調(diào)用一百次,一千次,結(jié)果都是相同的。

  GET /tickets # 獲取ticket列表

  GET /tickets/12 # 查看某個(gè)具體的ticket

  POST /tickets # 新建一個(gè)ticket

  PUT /tickets/12 # 更新ticket 12

  PATCH /tickets/12 # 更新ticket 12

  DELETE /tickets/12 # 刪除ticekt 12

  2. HTTP GET 方法

  HTTP GET 方法,用于獲取資源,不管調(diào)用多少次接口,結(jié)果都不會(huì)改變,所以是冪等的。

  GET /tickets # 獲取ticket列表

  GET /tickets/12 # 查看某個(gè)具體的ticket

  只是查詢數(shù)據(jù),不會(huì)影響到資源的變化,因此我們認(rèn)為它冪等。

  值得注意,冪等性指的是作用于結(jié)果而非資源本身。怎么理解呢?例如,這個(gè) HTTP GET 方法可能會(huì)每次得到不同的返回內(nèi)容,但并不影響資源。

  可能你會(huì)問有這種情況么?當(dāng)然有咯。例如,我們有一個(gè)接口獲取當(dāng)前時(shí)間,我們就應(yīng)該設(shè)計(jì)成

  GET /service_time # 獲取服務(wù)器當(dāng)前時(shí)間

  它本身不會(huì)對(duì)資源本身產(chǎn)生影響,因此滿足冪等性。

  3. HTTP POST 方法

  HTTP POST 方法是一個(gè)非冪等方法,因?yàn)檎{(diào)用多次,都將產(chǎn)生新的資源。

  POST /tickets # 新建一個(gè)ticket

  因?yàn)樗鼤?huì)對(duì)資源本身產(chǎn)生影響,每次調(diào)用都會(huì)有新的資源產(chǎn)生,因此不滿足冪等性。

  4. HTTP PUT 方法

  HTTP PUT 方法是不是冪等的呢?我們來看下

  PUT /tickets/12 # 更新ticket 12

  因?yàn)樗苯影褜?shí)體部分的數(shù)據(jù)替換到服務(wù)器的資源,我們多次調(diào)用它,只會(huì)產(chǎn)生一次影響,但是有相同結(jié)果的 HTTP 方法,所以滿足冪等性。

  5. HTTP PATCH 方法

  HTTP PATCH 方法是非冪等的。HTTP POST 方法和 HTTP PUT 方法可能比較好理解,但是 HTTP PATCH 方法只是更新部分資源,怎么是非冪等的呢?

  因?yàn)?,PATCH 提供的實(shí)體則需要根據(jù)程序或其它協(xié)議的定義,解析后在服務(wù)器上執(zhí)行,以此來修改服務(wù)器上的資源。換句話說,PATCH 請(qǐng)求是會(huì)執(zhí)行某個(gè)程序的,如果重復(fù)提交,程序可能執(zhí)行多次,對(duì)服務(wù)器上的資源就可能造成額外的影響,這就可以解釋它為什么是非冪等的了。

  可能你還不能理解這點(diǎn)。我們舉個(gè)例子

  PATCH /tickets/12 # 更新ticket 12

  此時(shí),我們服務(wù)端對(duì)方法的處理是,當(dāng)調(diào)用一次方法,更新部分字段,將這條 ticket 記錄的操作記錄加一,這次,每次調(diào)用的資源是不是變了呢,所以它是有可能是非冪等的操作。

  6. HTTP DELETE 方法

  HTTP DELETE 方法用于刪除資源,會(huì)將資源刪除。

  DELETE /tickets/12 # 刪除ticekt 12

  調(diào)用一次和多次對(duì)資源產(chǎn)生影響是相同的,所以也滿足冪等性。

  你是怎么理解 RESTful的?

  2000 年,Roy Thomas Fielding 博士在他那篇著名的博士論文《Architectural Styles and the Design of Network-based Software Architectures》中提出了幾種軟件應(yīng)用的架構(gòu)風(fēng)格,REST 作為其中的一種架構(gòu)風(fēng)格,在這篇論文的第5章中進(jìn)行了概括性的介紹。

  REST 是“REpresentational State Transfer”的縮寫,可以翻譯成“表現(xiàn)狀態(tài)轉(zhuǎn)換”,但是在絕大多數(shù)場合中我們只說 REST 或者 RESTful。Fielding 在論文中將 REST 定位為“分布式超媒體應(yīng)用(Distributed Hypermedia System)”的架構(gòu)風(fēng)格,它在文中提到一個(gè)名為“HATEOAS(Hypermedia as the engine of application state)”的概念。

  我們利用一個(gè)面向最終用戶的 Web 應(yīng)用來對(duì)這個(gè)概念進(jìn)行簡單闡述:這里所謂的應(yīng)用狀態(tài)(Application State)表示 Web 應(yīng)用的客戶端的狀態(tài),簡單起見可以理解為會(huì)話狀態(tài)。資源在瀏覽器中以超媒體的形式呈現(xiàn),通過點(diǎn)擊超媒體中的鏈接可以獲取其它相關(guān)的資源或者對(duì)當(dāng)前資源進(jìn)行相應(yīng)的處理,獲取的資源或者針對(duì)資源處理的響應(yīng)同樣以超媒體的形式再次呈現(xiàn)在瀏覽器上。由此可見,超媒體成為了驅(qū)動(dòng)客戶端會(huì)話狀態(tài)的轉(zhuǎn)換的引擎。

  借助于超媒體這種特殊的資源呈現(xiàn)方式,應(yīng)用狀態(tài)的轉(zhuǎn)換體現(xiàn)為瀏覽器中呈現(xiàn)資源的轉(zhuǎn)換。如果將超媒體進(jìn)一步抽象成一般意義上的資源呈現(xiàn)(Representation )方式,那么應(yīng)用狀態(tài)變成了可被呈現(xiàn)的狀態(tài)(REpresentational State)。應(yīng)用狀態(tài)之間的轉(zhuǎn)換就成了可被呈現(xiàn)的狀態(tài)裝換(REpresentational State Transfer),這就是 REST。

  總結(jié):REST 是一種很籠統(tǒng)的概念,它代表一種架構(gòu)風(fēng)格。

  更多關(guān)于“Java培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒已有十余年的培訓(xùn)經(jīng)驗(yàn),課程大綱更科學(xué)更專業(yè),有針對(duì)零基礎(chǔ)的就業(yè)班,有針對(duì)想提升技術(shù)的好程序員班,高品質(zhì)課程助力你實(shí)現(xiàn)java程序員夢(mèng)想。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
服務(wù)器為什么要用Linux?

服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢(shì)和特點(diǎn)。包括其...詳情>>

2023-10-14 12:34:11
ORM解決的主要問題是什么?

ORM(對(duì)象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲(chǔ),而在面向?qū)ο?..詳情>>

2023-10-14 12:26:19
Go為什么不支持三元運(yùn)算符?

Go為什么不支持三元運(yùn)算符Go語言是一種以簡潔和有效性為目標(biāo)的編程語言,因此在設(shè)計(jì)過程中,Go的設(shè)計(jì)者刻意排除了一些他們認(rèn)為可能導(dǎo)致復(fù)雜性或...詳情>>

2023-10-14 12:12:36
IT通常說的平臺(tái)是什么意思?

在信息技術(shù)(IT)領(lǐng)域,”平臺(tái)”這個(gè)詞有著廣泛的含義,它常常指代支持軟件應(yīng)用開發(fā)和運(yùn)行的基礎(chǔ)框架和環(huán)境。以下是對(duì)”平臺(tái)”這個(gè)概念的更深入...詳情>>

2023-10-14 11:55:36
什么是PowerPivot?

什么是PowerPivotPowerPivot,全稱”PowerPivot for Excel”,是Microsoft提供的一種數(shù)據(jù)分析工具,可以作為Excel的插件使用。通過PowerPivot,...詳情>>

2023-10-14 11:25:48