RESTful設計

RESTful架構:python

  (1)每個URI表明一種資源;數據庫

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

  (3)客戶端經過四個HTTP動詞,對服務器端資源進行操做,實現"表現層狀態轉化"。api

 

 

10個注意的設計規範:跨域

1.API與用戶的通信協議,老是用HTTPs協議數組

 

2.域名服務器

  • https://api.example.com                         儘可能將API部署在專用域名(會存在跨域問題)
  • https://example.org/api/                        API放在後面

3.版本架構

  url       如:https://api.example.com/v1/     應該將API的版本號放在url的後面app

  請求頭          跨域時引起屢次請求異步

4.路徑(接口命名)

  路徑又稱"終點"(endpoint)

  在RESTful架構中,每一個網址表明一種資源(resource),因此網址中不能有動詞,只能有名詞,並且所用的名詞每每與數據庫的表格名對應。

  通常來講,數據庫中的表都是同種記錄的"集合"(collection),因此API中的名詞也應該使用複數。

5.method 方式

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

6.過濾信息(Filtering)

  經過在url上傳參的形式傳遞搜索條件

  • https://api.example.com/v1/zoos?limit=10:指定返回記錄的數量
  • https://api.example.com/v1/zoos?offset=10:指定返回記錄的開始位置
  • https://api.example.com/v1/zoos?page=2&per_page=100:指定第幾頁,以及每頁的記錄數
  • https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回結果按照哪一個屬性排序,以及排序順序
  • https://api.example.com/v1/zoos?animal_type_id=1:指定篩選條件

7.狀態碼(Status Codes)

  200 OK - [GET]:服務器成功返回用戶請求的數據,該操做是冪等的(Idempotent)。
  201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。
  202 Accepted - [*]:表示一個請求已經進入後臺排隊(異步任務)
  204 NO CONTENT - [DELETE]:用戶刪除數據成功。
  400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操做,該操做是冪等的。
  401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
  403 Forbidden - [*] 表示用戶獲得受權(與401錯誤相對),可是訪問是被禁止的。
  404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操做,該操做是冪等的。
  406 Not Acceptable - [GET]:用戶請求的格式不可得(好比用戶請求JSON格式,可是隻有XML格式)。
  410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再獲得的。
  422 Unprocesable entity - [POST/PUT/PATCH] 當建立一個對象時,發生一個驗證錯誤。
  500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將沒法判斷髮出的請求是否成功。

8.錯誤信息

  應該返回錯誤信息,error看成key

  {

    error : " 哪裏錯誤"

  }

9.返回結果,針對不一樣操做,服務器向用戶返回的結果應該符合如下規範: 

  GET /collection:返回資源對象的列表(數組)
  GET /collection/resource:返回單個資源對象
  POST /collection:返回新生成的資源對象
  PUT /collection/resource:返回完整的資源對象
  PATCH /collection/resource:返回完整的資源對象
  DELETE /collection/resource:返回一個空文檔

10.Hypermedia API,RESTful API最好作到Hypermedia,即返回結果中提供連接,連向其餘API方法,使得用戶不查文檔,也知道下一步應該作什麼。

  {"link": {

   "rel" :    "collection https://www.example.com/zoos" ,
   "href" :   "https://api.example.com/zoos" ,
   "title" "List of zoos" ,
   "type" :   "application/vnd.yourformat+json"
}}
相關文章
相關標籤/搜索