RESTful

一、什么是RESTful

1.1來源

REST這個詞,是Roy Thomas Fielding在他2000年的博士論文中提出的。Roy Fielding是 HTTP 規(guī)范的主要編寫者之一、Apache服務(wù)器軟件的作者之一、Apache基金會的第一任主席。

1.2名稱解釋

REST,即Resource Representational State Transfer的縮寫。意思是:“表現(xiàn)層狀態(tài)轉(zhuǎn)移”。

Resource:資源,即"數(shù)據(jù)",你可以用一個URI(統(tǒng)一資源定位符)指向它,每種資源對應(yīng)一個特定的URI。要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或獨一無二的識別符;

Representational:某種表現(xiàn)形式--"資源"具體呈現(xiàn)出來的形式,比如用JSON,XML,JPEG等;

State Transfer:狀態(tài)變化。通過HTTP動詞實現(xiàn)(GET、POST、PUT、DELETE等)?;ヂ?lián)網(wǎng)通信協(xié)議HTTP協(xié)議,是一個無狀態(tài)協(xié)議。這意味著,所有的狀態(tài)都保存在服務(wù)器端。因此,如果客戶端想要操作服務(wù)器,必須通過某種手段,讓服務(wù)器端發(fā)生"狀態(tài)轉(zhuǎn)化"(State Transfer)。而這種轉(zhuǎn)化是建立在表現(xiàn)層之上的,所以就是"表現(xiàn)層狀態(tài)轉(zhuǎn)化"。

RESTful API就是REST風(fēng)格的接口,RESTful是一種軟件架構(gòu)風(fēng)格,而不是標(biāo)準(zhǔn)。

二、REST和SOAP的區(qū)別

2.1什么是SOAP

SOAP (Simple Object Access Protocol) 顧名思義,是一個嚴格定義的信息交換協(xié)議,用于在Web Service中把遠程調(diào)用和返回封裝成機器可讀的格式化數(shù)據(jù)。事實上SOAP數(shù)據(jù)使用XML數(shù)據(jù)格式,定義了一整套復(fù)雜的標(biāo)簽,以描述調(diào)用的遠程過程、參數(shù)、返回值和出錯信息等等??偟膩碚f,它是交換數(shù)據(jù)的一種規(guī)范,是一種輕量級的、簡單的、基于xml的協(xié)議。

2.2兩者區(qū)別

1.安全性:SOAP優(yōu)于REST
2.效率和易用性:REST更勝一籌
3.成熟度:SOAP優(yōu)于REST
4.REST是一種風(fēng)格,而SOAP是一種協(xié)議

三、設(shè)計RESTful風(fēng)格API

3.1、通信協(xié)議

采用Http協(xié)議,對于資源的具體操作類型,常用的HTTP動詞有下面五個:

GET:從服務(wù)器取出資源(一項或多項)。
POST:在服務(wù)器新建一個資源。
PUT:在服務(wù)器更新資源(客戶端提供改變后的完整資源)。
PATCH:在服務(wù)器更新資源(客戶端提供改變的屬性)。
DELETE:從服務(wù)器刪除資源。

3.2、用 URL 定位資源

REST 的主體是資源,所謂“資源”,即數(shù)據(jù),就是網(wǎng)絡(luò)上的一個具體信息,例如:一張圖片,一段文字、一種服務(wù),所以網(wǎng)址中不能有動詞,只能有名詞,而且所用的名詞往往與數(shù)據(jù)庫的表格名對應(yīng)??傊褪且粋€實際存在的東西,而 URL 就是用來指向這個資源的。

舉例來說,有一個API提供動物園(zoo)的信息,還包括各種動物和雇員的信息,則它的路徑應(yīng)該設(shè)計成下面這樣。

https://api.example.com/zoos
https://api.example.com/animals
https://api.example.com/employees
3.3、用 HTTP 動詞描述操作

GET /zoos:列出所有動物園
POST /zoos:新建一個動物園
GET /zoos/ID:獲取某個指定動物園的信息
PUT /zoos/ID:更新某個指定動物園的信息(提供該動物園的全部信息)
PATCH /zoos/ID:更新某個指定動物園的信息(提供該動物園的部分信息)
DELETE /zoos/ID:刪除某個動物園
GET /zoos/ID/animals:列出某個指定動物園的所有動物
DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物

四、RESTful 的其他細節(jié)

4.1、命名規(guī)則
  • 全部小寫,用 _ 或 - 線連接。(之所以不用駝峰命名法,是因為早期的 URI 一般都是表示服務(wù)器上的文件路徑,而不同服務(wù)器對大小寫的敏感性是不同的,為了兼容不同服務(wù)器所以才規(guī)定不能混用大小寫字母。)
  • URL 中只用名詞指定資源,因為 REST 的核心是資源,而表示資源的詞語天然就是名詞。
  • 資源用復(fù)數(shù)表示。

4.2、版本

一種方法是在 URL 中添加版本號,例如:

https://api.example.com/v1/zoos

另一種方法是將版本號加在 HTTP 請求頭信息的 Accept 字段中,例如:

Accept: version=1.0

網(wǎng)上能找到的版本號加在 URL 中的例子,都是如我上例所示的寫法。但是 Jack_Zeng 指出,這樣寫容易有歧義,會讓人誤以為 v1 也是資源的一部分,一般都是這么寫:

https://api.example.com/zoos?api-version=1

五、RESTful接口測試

專業(yè)的測試步驟:

5.1、測試的方法(列舉其中兩種)

1.采用Postman測試工具
2.采用swagger(不做介紹)

5.1.1、Postman的主要功能
  • 可以模擬各種HTTP 請求
  • Collection 功能(測試集合)
  • 人性化的Response整理
  • 內(nèi)置測試腳本語言
  • 設(shè)定變量與環(huán)境
5.1.2、HTTP Header

Accept: 指定客戶端能夠接收的內(nèi)容類型
Accept-Charset: 瀏覽器可以接收的字符編碼集
Authorization: HTTP授權(quán)證書
Content-Type: 請求的與實體對應(yīng)的MIME信息
Referer: 先前的網(wǎng)頁的地址,當(dāng)前請求網(wǎng)頁緊隨其后,及來路

5.2、編寫測試計劃

了解完接口的格式之后,根據(jù)項目中的業(yè)務(wù)需求編寫測試計劃?,F(xiàn)在有一個業(yè)務(wù)需求:

GET : http://localhost:8080/api/users/list
header : Content-Type = application/json
body : 空
Response : 返回所有User對象
Status code : 200

測試計劃:

實行的測試用例分為兩種:
正向的測試用例 : 返回所有對象
負向的測試用例 : URL輸入不正確

5.3、使用Postman進行用例的測試

正向測試用例:


在Tests里寫下驗證測試結(jié)果信息:

正向測試用例的返回結(jié)果:


負向測試用例:
修改為錯誤路徑 http://localhost:8080/api/users/info

負向測試用例的返回結(jié)果:


相關(guān)教程
https://www.imooc.com/learn/811
https://www.imooc.com/learn/1048

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • RESTful架構(gòu),是目前最流行的一種互聯(lián)網(wǎng)軟件架構(gòu)。它結(jié)構(gòu)清晰、符合標(biāo)準(zhǔn)、易于理解、擴展方便,所以正得到越來越多...
    情鬼下凡閱讀 284評論 0 0
  • RESTful學(xué)習(xí)筆記 RESTful是什么? 它的本質(zhì)是一種軟件架構(gòu)風(fēng)格,核心是面向資源(面向資源去設(shè)計API)...
    EL_PSY_CONGROO閱讀 393評論 0 0
  • 此文包含內(nèi)容 1)什么是RESTful2)SOAP和REST的區(qū)別3)如何設(shè)計RESTFul風(fēng)格API(動物園為例...
    ZhaoJw_44b1閱讀 374評論 0 0
  • 一、什么是RESTful 1、起源 REST這個詞起源于2000年Roy Thomas Fielding在他的博士...
    MonesyHuang閱讀 1,716評論 0 0
  • 一、說明 REST表示 Representational State Transfer(表示性狀態(tài)轉(zhuǎn)換). 它是可...
    洛杉磯嘚凌晨閱讀 280評論 0 0

友情鏈接更多精彩內(nèi)容