第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Flask 框架教程 Flask 框架教程 RESTful 架構規(guī)范介紹

RESTful 架構規(guī)范介紹

RESTful 架構是目前流行的一種互聯(lián)網(wǎng)軟件架構。它結構清晰、符合標準、易于理解、擴展方便,所以正得到越來越多網(wǎng)站的采用。本節(jié)講解 REST 的概念和 RESTful 架構。

1. 什么是 REST

REST 全稱是 Representational State Transfer 的縮寫,中文翻譯是表述性狀態(tài)轉移。Roy Thomas Fielding 首次在他的博士論文中提出的 REST 這個概念,他把互聯(lián)網(wǎng)軟件的架構原則,定名為 REST。

Roy Thomas Fielding 提出 REST 的概念,是為了得到一個以網(wǎng)絡為基礎的應用軟件的架構,得到一個功能強、性能好、適宜通信的架構。REST 指的是一組架構約束條件和原則,如果一個架構符合 REST 的約束條件和原則,我們就稱它為 RESTful 架構。

雖然 REST 本身受 Web 技術的影響很深,但理論上,REST 架構風格并不是綁定在 HTTP 應用上。目前 HTTP 是唯一與 REST 相關的應用領域,因此 REST 通常是指基于 HTTP 實現(xiàn)的 REST。

2. 理解 REST

REST 是 Representational State Transfer 的縮寫,通過理解這個詞組中每個單詞的含義,去理解 REST。

2.1 資源 Resource

REST 的名稱 “表述性狀態(tài)轉移” 中,省略了主語。REST 的全稱應該是 “資源表述性狀態(tài)轉移”。

所謂 “資源”,就是網(wǎng)絡上的一個實體,或者說是網(wǎng)絡上的一個具體信息。面是一些資源的例子:
它可以是一段文本、一張圖片、一首歌曲、一種服務,總之就是一個具體的實在,下

  • 一張圖片
  • 一個視頻
  • 一篇文章
  • 一篇回復

使用統(tǒng)一資源定位符 URI 指向資源,對應一個特定的 URI。通過 URI 要獲取這個資源,因此 URI 就成了每一個資源的地址或獨一無二的識別符。

下面以論壇為例,給出資源和相關 URI:

論壇中存在有多個主題 (topic),每個主題有一個唯一的 id,在這個例子中 /topics/123 標識了一個主題;每個主題下存在相應的回復 (answer),每個回復有一個唯一的 id,在這個例子中 /answers/123 標識了一個回復。

對每一種資源,可以進行增加、修改、刪除的操作,在這個例子中,即為增加主題、修改主題、刪除主題。

2.2 表述性 Represtation

資源是一種信息實體,在外界的具體呈現(xiàn),可以有多種表述(或成為表現(xiàn)、表示)形式,在客戶端和服務端之間傳送的也是資源的表述,而不是資源本身。例如,文本資源可以采用 HTML、XML、JSON 等格式表現(xiàn),圖片資源可以使用 PNG 或 JPG 等等格式表現(xiàn)。

在 HTTP 協(xié)議中,客戶端可以通過 Accept 消息頭請求一種特定格式的表述,服務端則通過 Content-Type 告訴客戶端資源的表述形式。

例如,在服務端存在資源 icon.png,客戶端請求資源 icon.png 的 HTTP 報文如下:

GET /icon.png HTTP/1.1
Host: www.example.com
Connection: keep-alive
User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/81.0
Accept: text/html,image/png,*/*;
...
省略
...

在第 5 行,消息頭 Accept 描述客戶端希望接收的數(shù)據(jù)類型是 text/html 或者 image/png 格式。服務端收到請求報文后,響應客戶端如下:

HTTP/1.1 200 OK 
server: nginx/1.14.0 (Ubuntu)
date: Wed, 09 Sep 2020 07:52:21 GMT
content-type: image/png
content-length: 194
...
省略
...

在第 4 行,消息頭 content-type 描述了響應報文中的數(shù)據(jù)類型是 image/png。

2.3 狀態(tài)轉移 State Transfrer

在客戶端和服務器的的互動過程,客戶端需要通過某種手段讓服務器端發(fā)生 “狀態(tài)轉移”(State Transfer)。例如,在論壇中,論壇當前包含的主題以及相應的回復,即為服務端的狀態(tài),增加、修改、刪除主題或者回復,都會引起 “狀態(tài)轉移”。

根據(jù) HTTP 標準,有 4 個 HTTP 請求方法,可以用于服務端的 “狀態(tài)轉移”:

請求方法 功能
GET 獲取資源
POST 新建資源
PUT 更新資源
DELETE 刪除資源

2.4 概括

綜合上面的解釋,總結一下什么是 REST:

  1. 服務端使用 URI 定位資源;

  2. 客戶端和服務器之間,傳遞這種資源的某種表現(xiàn)形式;

  3. 客戶端通過四個 HTTP 方法 (GET/POST/PUT/DELETE),對服務器端資源進行操作,實現(xiàn) “資源表述狀態(tài)轉移”。

3. 例子

REST 描述的是在網(wǎng)絡中客戶端和服務端的一種交互形式,遵循 REST 原則的軟件架構被稱為 RESTful 架構,本小節(jié)一個具體的 RESTful 架構的例子。

3.1 資源

在一個論壇中,有兩種類型的資源:主題和回復,如下所示:

每個資源都有自己的 URI,/topics/123 是 id 為 123 的主題對應的 URI,/anwers/456 是 id 為 456 的回復對應的 URI。

3.2 訪問資源的 API

客戶端可以查看、新增、修改、刪除主題,相應的 URI 如下:

HTTP 方法 行為 URI
GET 獲取所有的主題 http://www.bbs.com/topics
GET 獲取特定的主題 http://www.bbs.com/topics/123
POST 新建主題 http://www.bbs.com/topics
PUT 修改主題 http://www.bbs.com/topics/123
DELETE 刪除主題 http://www.bbs.com/topics/123

客戶端可以查看、新增、修改、刪除回復,相應的 URI 如下:

HTTP 方法 行為 URI
GET 獲取所有的回復 http://www.bbs.com/answers
GET 獲取特定的回復 http://www.bbs.com/answers/456
POST 新建回復 http://www.bbs.com/answers
PUT 修改回復 http://www.bbs.com/answers/456
DELETE 刪除回復 http://www.bbs.com/answers/456

3.3 返回 JSON 格式的數(shù)據(jù)

客戶端訪問操作資源的 URI 時,服務端返回 JSON 格式的數(shù)據(jù)。例如:

1. 獲取特定的主題

客戶端獲取 id 為 123 的主題信息,發(fā)出如下請求:

GET /topics/123

服務端返回 JSON 格式的數(shù)據(jù):

{ 
  "title": "今天吃什么?",
  "content": "謝謝"
}

在返回的 JSON 數(shù)據(jù)中, title 表示主題的標題,content 表示主題的正文。

2. 獲取所有的主題

客戶端獲取所有的主題信息,發(fā)出如下請求:

GET /topics

服務端返回 JSON 格式的數(shù)據(jù):

[
  { 
    "title": "今天吃什么?",
    "content": "謝謝"
  },
  { 
    "title": "今天下雨嗎?",
    "content": "有誰知道"
  }
]  

返回的 JSON 數(shù)據(jù)是一個數(shù)組,數(shù)組包含 2 項元素,每個元素表示一個主題。

4. 小結

本節(jié)講解了 REST 的概念和 RESTful 架構,使用思維導圖總結如下:

圖片描述

在下一個小節(jié)中,通過具體的實例理解 RESTful 架構。