溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

RestFul API知識點有哪些

發(fā)布時間:2021-11-15 14:21:12 來源:億速云 閱讀:166 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“RestFul API知識點有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、重要概念

REST,即 REpresentational State Transfer  的縮寫。這個詞組的翻譯過來就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。這樣理解起來甚是晦澀,實際上 REST 的全稱是 Resource Representational  State Transfe ,直白地翻譯過來就是 “資源”在網(wǎng)絡(luò)傳輸中以某種“表現(xiàn)形式”進(jìn)行“狀態(tài)轉(zhuǎn)移”  。如果還是不能繼續(xù)理解,請繼續(xù)往下看,相信下面的講解一定能讓你理解到底啥是 REST 。

我們分別對上面涉及到的概念進(jìn)行解讀,以便加深理解,不過實際上你不需要搞懂下面這些概念,也能看懂我下一部分要介紹到的內(nèi)容。不過,為了更好地能跟別人扯扯  “RestFul API”我建議你還是要好好理解一下!

  • 資源(Resource) :我們可以把真實的對象數(shù)據(jù)稱為資源。一個資源既可以是一個集合,也可以是單個個體。比如我們的班級 classs  是代表一個集合形式的資源,而特定的 class 代表單個個體資源。每一種資源都有特定的 URI(統(tǒng)一資源定位符)與之對應(yīng),如果我們需要獲取這個資源,訪問這個  URI 就可以了,比如獲取特定的班級:/class/12。另外,資源也可以包含子資源,比如  /classs/classId/teachers:列出某個指定班級的所有老師的信息

  • 表現(xiàn)形式(Representational):"資源"是一種信息實體,它可以有多種外在表現(xiàn)形式。我們把"資源"具體呈現(xiàn)出來的形式比如  json,xml,image,txt 等等叫做它的"表現(xiàn)層/表現(xiàn)形式"。

  • 狀態(tài)轉(zhuǎn)移(State Transfer) :大家第一眼看到這個詞語一定會很懵逼?內(nèi)心 BB:這尼瑪是啥啊?大白話來說 REST  中的狀態(tài)轉(zhuǎn)移更多地描述的服務(wù)器端資源的狀態(tài),比如你通過增刪改查(通過 HTTP 動詞實現(xiàn))引起資源狀態(tài)的改變。ps:互聯(lián)網(wǎng)通信協(xié)議 HTTP  協(xié)議,是一個無狀態(tài)協(xié)議,所有的資源狀態(tài)都保存在服務(wù)器端。

綜合上面的解釋,我們總結(jié)一下什么是 RESTful 架構(gòu):

  1. 每一個 URI 代表一種資源;

  2. 客戶端和服務(wù)器之間,傳遞這種資源的某種表現(xiàn)形式比如 json,xml,image,txt 等等;

  3. 客戶端通過特定的 HTTP 動詞,對服務(wù)器端資源進(jìn)行操作,實現(xiàn)"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。

二、REST 接口規(guī)范

1、動作

  • GET :請求從服務(wù)器獲取特定資源。舉個例子:GET /classs(獲取所有班級)

  • POST :在服務(wù)器上創(chuàng)建一個新的資源。舉個例子:POST /classs(創(chuàng)建班級)

  • PUT :更新服務(wù)器上的資源(客戶端提供更新后的整個資源)。舉個例子:PUT /classs/12(更新編號為 12 的班級)

  • DELETE :從服務(wù)器刪除特定的資源。舉個例子:DELETE /classs/12(刪除編號為 12 的班級)

  • PATCH :更新服務(wù)器上的資源(客戶端提供更改的屬性,可以看做作是部分更新),使用的比較少,這里就不舉例子了。

2、路徑(接口命名)

路徑又稱"終點"(endpoint),表示 API 的具體網(wǎng)址。實際開發(fā)中常見的規(guī)范如下:

  • 網(wǎng)址中不能有動詞,只能有名詞,API 中的名詞也應(yīng)該使用復(fù)數(shù)。 因為 REST  中的資源往往和數(shù)據(jù)庫中的表對應(yīng),而數(shù)據(jù)庫中的表都是同種記錄的"集合"(collection)。如果 API  調(diào)用并不涉及資源(如計算,翻譯等操作)的話,可以用動詞。 比如:GET /calculate?param1=11¶m2=33

  • 不用大寫字母,建議不用中杠 - 不用下杠 _ 比如邀請碼寫成 invitation-code而不是invitation_code

Talk is cheap!來舉個實際的例子來說明一下吧!現(xiàn)在有這樣一個 API  提供班級(class)的信息,還包括班級中的學(xué)生和教師的信息,則它的路徑應(yīng)該設(shè)計成下面這樣。

接口盡量使用名詞,禁止使用動詞。 下面是一些例子:

GET    /classs:列出所有班級 POST   /classs:新建一個班級 GET    /classs/classId:獲取某個指定班級的信息 PUT    /classs/classId:更新某個指定班級的信息(一般傾向整體更新) PATCH  /classs/classId:更新某個指定班級的信息(一般傾向部分更新) DELETE /classs/classId:刪除某個班級 GET    /classs/classId/teachers:列出某個指定班級的所有老師的信息 GET    /classs/classId/students:列出某個指定班級的所有學(xué)生的信息 DELETE classs/classId/teachers/ID:刪除某個指定班級下的指定的老師的信息

反例:

/getAllclasss /createNewclass /deleteAllActiveclasss

理清資源的層次結(jié)構(gòu),比如業(yè)務(wù)針對的范圍是學(xué)校,那么學(xué)校會是一級資源:/schools,老師: /schools/teachers,學(xué)生:  /schools/students 就是二級資源。

3、過濾信息(Filtering)

如果我們在查詢的時候需要添加特定條件的話,建議使用 url 參數(shù)的形式。比如我們要查詢 state 狀態(tài)為 active 并且 name 為  guidegege 的班級:

GET    /classs?state=active&name=guidegege

比如我們要實現(xiàn)分頁查詢:

GET    /classs?page=1&size=10 //指定第1頁,每頁10個數(shù)據(jù)

4、狀態(tài)碼(Status Codes)

RestFul API知識點有哪些

三、HATEOAS

RestFul 的極致是 hateoas ,但是這個基本不會在實際項目中用到。

上面是 RESTful API 最基本的東西,也是我們平時開發(fā)過程中最容易實踐到的。實際上,RESTful API 最好做到  Hypermedia,即返回結(jié)果中提供鏈接,連向其他 API 方法,使得用戶不查文檔,也知道下一步應(yīng)該做什么。

比如,當(dāng)用戶向 api.example.com 的根目錄發(fā)出請求,會得到這樣一個文檔。

{"link": {   "rel":   "collection https://www.example.com/classs",   "href":  "https://api.example.com/classs",   "title": "List of classs",   "type":  "application/vnd.yourformat+json" }}

上面代碼表示,文檔中有一個 link 屬性,用戶讀取這個屬性就知道下一步該調(diào)用什么 API 了。rel 表示這個 API  與當(dāng)前網(wǎng)址的關(guān)系(collection 關(guān)系,并給出該 collection 的網(wǎng)址),href 表示 API 的路徑,title 表示 API  的標(biāo)題,type 表示返回類型 Hypermedia API 的設(shè)計被稱為HATEOAS。

在 Spring 中有一個叫做 HATEOAS 的 API 庫,通過它我們可以更輕松的創(chuàng)建除符合 HATEOAS 設(shè)計的 API。

“RestFul API知識點有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

api
AI