1. 程式人生 > >RESTful規範 RESTful

RESTful規範 RESTful

 

REST風格
  -- 資源 網頁中能看到的都是資源
  -- URI  統一資源識別符號
     URL  統一資源定位符
  -- 統一資源介面
   對資源的操作根據HTTP請求方式的不同來進行不同操作
   遵循HTTP請求方式的語義
  -- 前後端傳輸的是資源的表述
  -- 展現的是資源的狀態
 凡是遵循REST風格實現的前後端互動都叫RESTful架構
  -- 核心思想
   -- 面向資源去程式設計  url中儘量名詞不要用動詞
   -- 根據HTTP請求方式的不同對資源進行不同的操作
  -- 在url中體現的
   -- 體現版本
    https://v2.bootcss.com/
    https://bootcss.com/v2
   -- 體現是否是API
    https://v2.bootcss.com/api
   -- 有過濾條件
    https://v2.bootcss.com/course?page=1
   -- 儘量用https
  -- 在返回值中
   -- 攜帶狀態碼
   -- 返回值
    -- get  返回檢視的所有或者單條資料
    -- post  返回新增的這條資料
    -- put/patch  返回更新的這條資料
    -- delete   返回值空
   -- 攜帶錯誤資訊
   -- 攜帶超連結

RESTful

 

web服務互動

  我們在瀏覽器中能看到的每個網站,都是一個web服務。那麼我們在提供每個web服務的時候,

  都需要前後端互動,前後端互動就一定有一些實現方案,我們通常叫web服務互動方案。

  目前主流的三種web服務互動方案:

    -- REST ( Representational State Transfer)表述性狀態轉移

    -- SOAP (Simple Object Access Protocol)  簡單的物件訪問協議

    -- XML-RPC (XML Remote Procedure Call)基於XML的遠端過程呼叫

  XML-RPC是通過XML將呼叫函式封裝,並使用HTTP協議作為傳送機制。

  後來在新的功能不斷被引入下,這個標準慢慢演變成為今日的SOAP協定。

  SOAP服務則是以本身所定義的操作集,來訪問網路上的資源。

  SOAP也是基於XML的,但是它不只限於HTTP協議的傳輸,包括TCP協議,UDP協議都可以傳輸。

  REST是Roy Thomas Fielding博士於2000年在他的博士論文裡提出來的。

  REST相比SOAP更加簡潔,效能和開發效率也有突出的優勢。

  我們今天主要說一下這個REST,現在越來越多的web服務開始採用REST風格設計和實現。

  例如,amazon.com提供接近REST風格的Web服務進行圖書查詢;雅虎提供的Web服務也是REST風格的。

  我們接下來要學的框架也是遵循REST風格的,那麼我們來看下它到底是個什麼樣的風格,

  瞭解了它是什麼後,我們看下它的優點是什麼,我們為什麼用它。

理解REST

  如果我們想要理解restful,就要理解Representational State Transfer這個片語的意思,表徵性狀態轉移。

  這裡所說的表徵性,其實指的就是資源。通常我們稱為資源狀態轉移。

什麼是資源

  任何事物,只要有被引用到的必要,它就是一個資源。

  我們在瀏覽器中看到的文字,視訊,圖片等等都是資源。這些都是實實在在存在的實體。

  資源可以是一個實體,也可以是抽象概念。

  比如說吧:

    -- Alex的個人資訊

    -- 沛齊的手機號

    -- Alex跟沛齊的潛在關係

  這些都是資源,可以是實體比如個人資訊,手機號。也可以是抽象的概念,比如兩個人的關係......

  那麼在我們的網路中,我們要引用資源,資源一定要有一個標識,在web中的唯一標識就是URI,

  URI我們不常聽說,我們經常用URL,那麼兩者區別是什麼呢~

什麼是URI,URL

  URI 統一資源標誌符。

  URL 統一資源定位符。

  URI是給我們的資源進行標識的,URL是描述我們資源地址的。

  比如說我們每個人都有名字和身份證,名字可能重名,但是身份證是唯一的,

  那麼身份證號就可以是我們的URI,標識我們每個人,也可以說標識我們每個資源。

  我們可以通過身份證號找到Alex,也可以通過下面這種方式找到他.....

  Alex的住址協議://地球/中國/屌絲省/屌絲市/寡婦村/250號街道/250號/Alex

  這個就是我們的URL,我們通過這兩種方式都可以找到我們的資源,

  其實我們的URL可以說是URI的子集,通過定位的方式實現的URI。

  這是我們資源的定位~~有了資源的地址後,我們要去訪問資源,那麼我們要通過什麼方式去訪問呢~~

統一資源介面

  現在我們可以通過URL去訪問到資源,那麼我們對資源會有很多不同的操作,增刪改查,

  以前我們可能會為了這個增加新設計一個URL,然後這個URL就是對資料進行增加的,

  還會為了更新和刪除分別設計一個URL,現在我們不用了,我們只有一個URL,

  然後根據HTTP請求方式的不同,對資源進行不同的操作,這個就是是統一資源介面。

  我們一定要遵循HTTP請求方法的語義,也就是說POST請求就在新增資料等....

資源的表述

  資源的表述其實就是資源的展現形式,我們客戶端和服務端傳輸的都是資源的表述,而不是資源本身。

  例如文字資源可以採用html、xml、json等格式,圖片可以使用PNG或JPG展現出來。

  那麼客戶端如何知道服務端提供哪種表述形式呢?

  可以通過HTTP內容協商,客戶端可以通過Accept頭請求一種特定格式的表述,服務端則通過Content-Type告訴客戶端資源的表述形式。

  這些資源的表述呈現在頁面上,就是我們說的資源狀態。

狀態轉移

  我們在看頁面的時候,從當前資源的表述(也可以說狀態或者表現層)會跳轉到其他的資源狀態。

  服務端通過超媒體告訴客戶端當前狀態有哪些後續狀態可以進入。

  這些類似"下一頁"之類的連結起的就是這種推進狀態的作用——指引你如何從當前狀態進入下一個可能的狀態。

總結 

  可以得知REST風格的特點如下:

  (1)在web中,只要有被引用的必要都叫資源。

  (2)每個URI代表一個資源,獨一無二的。

  (3)客戶端通過HTTP的方法,對伺服器端資源進行操作;

  (4)客戶端和伺服器之間,傳遞這種資源的某種表現層;

  (5)通過超連結的指引,實現"表現層狀態轉移"。

RESTful  

  如果一個架構符合REST的約束條件和原則,我們就稱它為RESTful架構。

  一種軟體的架構風格,設計風格,  為客戶端和服務端的互動提供一組設計原則和約束條件。

restful規範

一  面向資源程式設計

  每個URL代表一種資源,URL中儘量不要用動詞,要用名詞。

二  根據method不同,進行不同的操作

  GET/POST/PUT/DELETE/PATCH

三  在URL中體現版本

  https://www.bootcss.com/v1/mycss

  https://v1.bootcss.com/mycss

四  在URL中體現是否是API

  https://www.bootcss.com/api/mycss

  https://api.bootcss.com/mycss

五  在URL中的過濾條件

  https://www.bootcss.com/v1/mycss?page=3

六  儘量使用HTTPS

  https://www.bootcss.com/v1/mycss

七  響應時設定狀態碼

  1**   資訊,伺服器收到請求,需要請求者繼續執行操作

  2**  成功,操作被成功接收並處理

  3**  重定向,需要進一步的操作以完成請求

  4**  客戶端錯誤,請求包含語法錯誤或無法完成請求

  5**  伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

八  返回值

  GET請求 返回查到所有或單條資料

  POST請求  返回新增的資料

  PUT請求  返回更新資料

  PATCH請求  區域性更新  返回更新整條資料

  DELETE請求  返回值為空

九  返回錯誤資訊

  返回值攜帶錯誤資訊

十   Hypermedia API

  如果遇到需要跳轉的情況 攜帶調轉介面的URL

  ret = {                 code: 1000,                 data:{                     id:1,                     name:'小強',                     depart_id:http://www.luffycity.com/api/v1/depart/8/                 }             }

web服務互動

  我們在瀏覽器中能看到的每個網站,都是一個web服務。那麼我們在提供每個web服務的時候,

  都需要前後端互動,前後端互動就一定有一些實現方案,我們通常叫web服務互動方案。

  目前主流的三種web服務互動方案:

    -- REST ( Representational State Transfer)表述性狀態轉移

    -- SOAP (Simple Object Access Protocol)  簡單的物件訪問協議

    -- XML-RPC (XML Remote Procedure Call)基於XML的遠端過程呼叫

  XML-RPC是通過XML將呼叫函式封裝,並使用HTTP協議作為傳送機制。

  後來在新的功能不斷被引入下,這個標準慢慢演變成為今日的SOAP協定。

  SOAP服務則是以本身所定義的操作集,來訪問網路上的資源。

  SOAP也是基於XML的,但是它不只限於HTTP協議的傳輸,包括TCP協議,UDP協議都可以傳輸。

  REST是Roy Thomas Fielding博士於2000年在他的博士論文裡提出來的。

  REST相比SOAP更加簡潔,效能和開發效率也有突出的優勢。

  我們今天主要說一下這個REST,現在越來越多的web服務開始採用REST風格設計和實現。

  例如,amazon.com提供接近REST風格的Web服務進行圖書查詢;雅虎提供的Web服務也是REST風格的。

  我們接下來要學的框架也是遵循REST風格的,那麼我們來看下它到底是個什麼樣的風格,

  瞭解了它是什麼後,我們看下它的優點是什麼,我們為什麼用它。

理解REST

  如果我們想要理解restful,就要理解Representational State Transfer這個片語的意思,表徵性狀態轉移。

  這裡所說的表徵性,其實指的就是資源。通常我們稱為資源狀態轉移。

什麼是資源

  任何事物,只要有被引用到的必要,它就是一個資源。

  我們在瀏覽器中看到的文字,視訊,圖片等等都是資源。這些都是實實在在存在的實體。

  資源可以是一個實體,也可以是抽象概念。

  比如說吧:

    -- Alex的個人資訊

    -- 沛齊的手機號

    -- Alex跟沛齊的潛在關係

  這些都是資源,可以是實體比如個人資訊,手機號。也可以是抽象的概念,比如兩個人的關係......

  那麼在我們的網路中,我們要引用資源,資源一定要有一個標識,在web中的唯一標識就是URI,

  URI我們不常聽說,我們經常用URL,那麼兩者區別是什麼呢~

什麼是URI,URL

  URI 統一資源標誌符。

  URL 統一資源定位符。

  URI是給我們的資源進行標識的,URL是描述我們資源地址的。

  比如說我們每個人都有名字和身份證,名字可能重名,但是身份證是唯一的,

  那麼身份證號就可以是我們的URI,標識我們每個人,也可以說標識我們每個資源。

  我們可以通過身份證號找到Alex,也可以通過下面這種方式找到他.....

  Alex的住址協議://地球/中國/屌絲省/屌絲市/寡婦村/250號街道/250號/Alex

  這個就是我們的URL,我們通過這兩種方式都可以找到我們的資源,

  其實我們的URL可以說是URI的子集,通過定位的方式實現的URI。

  這是我們資源的定位~~有了資源的地址後,我們要去訪問資源,那麼我們要通過什麼方式去訪問呢~~

統一資源介面

  現在我們可以通過URL去訪問到資源,那麼我們對資源會有很多不同的操作,增刪改查,

  以前我們可能會為了這個增加新設計一個URL,然後這個URL就是對資料進行增加的,

  還會為了更新和刪除分別設計一個URL,現在我們不用了,我們只有一個URL,

  然後根據HTTP請求方式的不同,對資源進行不同的操作,這個就是是統一資源介面。

  我們一定要遵循HTTP請求方法的語義,也就是說POST請求就在新增資料等....

資源的表述

  資源的表述其實就是資源的展現形式,我們客戶端和服務端傳輸的都是資源的表述,而不是資源本身。

  例如文字資源可以採用html、xml、json等格式,圖片可以使用PNG或JPG展現出來。

  那麼客戶端如何知道服務端提供哪種表述形式呢?

  可以通過HTTP內容協商,客戶端可以通過Accept頭請求一種特定格式的表述,服務端則通過Content-Type告訴客戶端資源的表述形式。

  這些資源的表述呈現在頁面上,就是我們說的資源狀態。

狀態轉移

  我們在看頁面的時候,從當前資源的表述(也可以說狀態或者表現層)會跳轉到其他的資源狀態。

  服務端通過超媒體告訴客戶端當前狀態有哪些後續狀態可以進入。

  這些類似"下一頁"之類的連結起的就是這種推進狀態的作用——指引你如何從當前狀態進入下一個可能的狀態。

總結 

  可以得知REST風格的特點如下:

  (1)在web中,只要有被引用的必要都叫資源。

  (2)每個URI代表一個資源,獨一無二的。

  (3)客戶端通過HTTP的方法,對伺服器端資源進行操作;

  (4)客戶端和伺服器之間,傳遞這種資源的某種表現層;

  (5)通過超連結的指引,實現"表現層狀態轉移"。

RESTful  

  如果一個架構符合REST的約束條件和原則,我們就稱它為RESTful架構。

  一種軟體的架構風格,設計風格,  為客戶端和服務端的互動提供一組設計原則和約束條件。

restful規範

一  面向資源程式設計

  每個URL代表一種資源,URL中儘量不要用動詞,要用名詞。

二  根據method不同,進行不同的操作

  GET/POST/PUT/DELETE/PATCH

三  在URL中體現版本

  https://www.bootcss.com/v1/mycss

  https://v1.bootcss.com/mycss

四  在URL中體現是否是API

  https://www.bootcss.com/api/mycss

  https://api.bootcss.com/mycss

五  在URL中的過濾條件

  https://www.bootcss.com/v1/mycss?page=3

六  儘量使用HTTPS

  https://www.bootcss.com/v1/mycss

七  響應時設定狀態碼

  1**   資訊,伺服器收到請求,需要請求者繼續執行操作

  2**  成功,操作被成功接收並處理

  3**  重定向,需要進一步的操作以完成請求

  4**  客戶端錯誤,請求包含語法錯誤或無法完成請求

  5**  伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

八  返回值

  GET請求 返回查到所有或單條資料

  POST請求  返回新增的資料

  PUT請求  返回更新資料

  PATCH請求  區域性更新  返回更新整條資料

  DELETE請求  返回值為空

九  返回錯誤資訊

  返回值攜帶錯誤資訊

十   Hypermedia API

  如果遇到需要跳轉的情況 攜帶調轉介面的URL

  ret = {                 code: 1000,                 data:{                     id:1,                     name:'小強',                     depart_id:http://www.luffycity.com/api/v1/depart/8/                 }             }