0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

REST的6大指導原則

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-09 14:27 ? 次閱讀

1. 前言

REST 全稱為 :Resource Representational State Transfer. 是一種分布式超媒體系統(tǒng)( distributed hypermedia systems )架構風格。由Roy Fielding 提出。

REST API 也稱RESTful API, 其遵循REST架構規(guī)范的應用編程接口, 支持與RESTful WEB服務進行交互。簡單來講就是:符合REST架構風格的 WEB API 或WEB 服務就是 REST API。

2. REST 的6大指導原則

REST 定義了6個原則,這些原則使得一個WEB API 成為真正的RESTful API。

  • 統(tǒng)一接口(Uniform interface)
    開發(fā)者一旦熟悉了你的其中一個API,那么他就可以遵循類似的結構去使用其他API.
  • 客戶端服務器(Client-server)
    只要不改變他們之間的接口,服務端和客戶端可以相互替換或獨立開發(fā)。
  • 無狀態(tài)(Stateless)
    客戶端上下文狀態(tài)不應該存儲在服務端,而應該有客戶端去管理程序的狀態(tài)
  • 可緩存(Cacheable)
    優(yōu)秀的緩存可以部分或者完全消除客戶端和服務端的交互,最終提高應用的伸縮性和性能。
  • 分層系統(tǒng)(Layered System)
    REST可以允許你使用分層架構,讓你在服務器A上部署API, 服務器B上存儲數(shù)據,服務器C上進行權限驗證,客戶端不知道它實際連接的是哪個服務器。
  • 按需編碼(Code on demand (optional))
    這些規(guī)則可以幫組你構建真正的RESTful API ,所以盡量遵循著些規(guī)則。如果因為某些原因違反這些規(guī)則,事實上你還是在構建RESTful API ,只是不算真正的RESTful。

3. 最佳實踐

3.1 API名稱

API的名稱應該出現(xiàn)在URL中,API的標題也應該和名稱一致,所以起名子也是比較重要的一點,這決定了你的API是否容易讓人讀懂!

3.2 API的版本

API的版本應該遵循, MAJOR.MINOR.PATCH的結構,即主要.次要.補丁 。

如果有重大的改動,導致前后的版本不兼容應該升級主要版本, 比如從1.0 升級到2.0。

如果只是增加了一些特性,前后的版本都是兼容話,可以升級次要版本, 比如從1.0 升級到1.1.

如果有一些小的bug修改的話,可以在補丁版本的上升級,比如從 1.0 升級到1.0.1

例如:

https://mysite.com/v1/...
https://mysite.com/v2/...

3.3提供準確的API文檔

開發(fā)完成一個API之后,你需要讓API的使用者可以正確的使用它,那么就需要一份漂亮的API文檔了。

API文檔需要提供準確的請求路徑, 請求示例, 以及各種error時的狀態(tài)碼等。 可以使用Swagger等工具。

3.4資源路徑命名

  • 資源名稱使用名詞,而不要使用動詞。
    比如 POST : /cars 表示創(chuàng)建cars , GET: /cars 表示查詢cars 而不應該寫成/createCars , /getCars 等等。
  • 獲取集合資源與獲取特定資源,統(tǒng)一使用復數(shù)來表示資源。
    #獲取資源集合時使用復數(shù)名詞 
    例如 /schools
    
    
    #獲取特定資源
    例如 /schools/{school-id}  /schools/5
    
    
    #獲取特定資源的子資源 
    例如 /schools/{school-id}/grades  /schools/5/grades
    

3.5資源操作

RESTful API 使用HTTP 方法來對資源進行操作,相對應的一些常用操作如下:

HTTP method資源操作類型
GET查詢集合,查詢單個資源
POSTCreate 創(chuàng)建某個資源
PUTupdate 更新資源
PATCH局部更新資源
DELETE刪除資源
  • 創(chuàng)建資源 POST
    使用POST方法 創(chuàng)建資源,此處可以創(chuàng)建單個資源或者資源集合。創(chuàng)建成功應該立馬返回HTTP 201, 二接受到resource并未立即添加資源則返回 HTTP 202 。

    例如: 使用POST: /schools 添加多個school資源,
             /schools/{school-id}/grades 添加某個school資源的grade,
    
  • 查詢集合資源 及單個資源

    例如: 使用 GET: /schools?type=PRIMARY  查詢所有的小學
          使用 GET :/schools/{school-id}/grades 查詢某個學校的所有年級
              GET :/schools/{school-id}/grades/{grade-id}  查詢某個學校某個年級
    
  • 更新及修改資源 PUT/PATCH
    更新個修改資源包含多種情況:
    一種是完全更新,使用新的資源完全替換舊的資源。

    例如:PUT: /schools/{school-id}/address  更新某個客戶學校的地址信息
    

    一種是修改局部更新,根據需求去更新修改原有的資源。

    例如:PATCH: /schools/{school-id}/teachers  調整某個學校的老師
    

    舉個例子

    原有的資源如下:

    {
        "a":"A",
        "b":{
            "c":"C",
            "d":"D"
        }
    }
    

    當PATAH請求 如下:

    PATCH  HTTP/1.1
    Content-Type: application/merge-patch+json
    {
        "a":"Z",
        "b":{
            "d":null
        }
    }
    

    修改后的resource如下

    {
        "a":"Z",
        "b":{
            "c":"C"
        }
    }
    
  • 刪除資源
    刪除資源使用DELETE方法,刪除的方法有直接刪除,或者使資源不可見。

3.6請求參數(shù)

  • 其余不是資源的參數(shù)應該出現(xiàn)在請求參數(shù)中。而且查詢參數(shù)應該出現(xiàn)在GET請求中,不應該出現(xiàn)在PUT,POST請求中。
  • 請求參數(shù)應該使用駝峰命名法。
    例如:GET /orders?startDate=2022-01-03&endDate=2022-02-03
        DELETE /orders?status=EXPIRED
    
  • 使用唯一查詢參數(shù)進行過濾
    GET /orders?orderType=PAID
    GET /orders?amount >100.00
    
  • 分頁查詢
    API 使用offset={resultOffset}&limit={resultsPerPage} 進行分頁查詢,
    并且以第0條數(shù)據為起始。
    
    另外也可以使用 page={pageNumber}&limit={resultPerPage} 此時起始頁為第1頁
    
    使用index={pageIndex}&limit={resultPerPage}, 每一頁可以返回上一頁或者下一頁的link
    
    可以看如下例子:
        GET /orders?page=1&limit=15 第一頁的15條數(shù)據
        GET /orders?offset=0&limit=15 第一頁的15條數(shù)據
        GET /orders?page=5&limit=10 第五頁的10條數(shù)據 第51-60GET /orders?offset=50&limit=105160條數(shù)據
        GET /orders?index=xxxxxxx&limit=10  同樣也可以表示第51-60條數(shù)據,
      只不過對客戶端來說可能不知道第幾頁,response中應該包含有上一頁和下一頁的index
    
  • 排序
    API的排序功能是API非常重要的一個功能,可以使用sort,sort-by 即使沒有指出要排序,那么而應該給一個默認的排序。
    例如:
        GET /orders?sort=asc(date)  /orders?sort=desc(date) 
        GET /orders?sort=+date      /orders?sort=-date
        GET /orders?sort=date.asc      /orders?sort=date.desc
        GET /orders?sort=date&order-by=asc    /orders?sort=-date&order-by=desc 
    
     多字段排序示例:
        GET /orders?sort=desc(date),asc(amount)
        GET /orders?sort=-date,+amount
    

3.7使用HTTP狀態(tài)碼處理錯誤

Http狀態(tài)碼有很多,這里列舉一些常見的。

http status描述
2XXSUCCESS
200OK
201Create
202Accepted
204No Content
4XXClient Error
400Bad Request
401Unauthorized
403Forbidden
404Not Found
429Too Many Request
5xxServer Errors
500Internal Server Error

總結

本篇介紹了一些REST API的一些食用方式,我們工作中可以根據一些各自的條件,作為參考。歡迎留言講講自己的一些實踐經驗!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4123

    瀏覽量

    85277
  • 服務器
    +關注

    關注

    12

    文章

    8701

    瀏覽量

    84551
  • API
    API
    +關注

    關注

    2

    文章

    1461

    瀏覽量

    61490
  • 編程接口
    +關注

    關注

    1

    文章

    36

    瀏覽量

    7971
  • REST
    +關注

    關注

    0

    文章

    32

    瀏覽量

    9387
收藏 人收藏

    評論

    相關推薦

    新人報道,求各位大大指導

    新人報道,求各位大大指導{:soso_e100:}
    發(fā)表于 04-25 16:11

    有沒有一個網站是專門介紹各種芯片參數(shù),原理圖的,小白在此跪求各位大大指導。

    有沒有一個網站是專門介紹各種芯片參數(shù),原理圖的,小白在此跪求各位大大指導。
    發(fā)表于 05-07 21:49

    FPGA設計的指導原則有哪些?需要注意什么?

    FPGA設計的指導原則有哪些FPGA設計需注意的方方面面
    發(fā)表于 04-08 07:01

    War3Rest.exe下載

    War3Rest.exe
    發(fā)表于 10-04 07:46 ?0次下載
    War3<b class='flag-5'>Rest</b>.exe下載

    FPGA設計的指導原則

    FPGA設計的指導原則:這里“面積”指一個設計消耗FPGA/CPLD 的邏輯資源的數(shù)量,對于FPGA 可以用所消耗的觸發(fā)器(FF)和查找表(LUT)來衡量,更一般的衡量方式可以用設計所占用的等
    發(fā)表于 01-11 09:01 ?107次下載

    REST學習

    學習REST必備
    發(fā)表于 07-05 15:22 ?15次下載

    設計復用的RTL指導原則

    設計可復用的基本要求是RTL 代碼可移植。通常的軟件工程指導原則在RTL 編碼時也適用。類似軟件開發(fā),基本的編碼指導原則要求RTL 代碼簡單、結構化和規(guī)則化。這樣的代碼也易于綜合
    發(fā)表于 12-24 00:46 ?32次下載

    FPGA設計的指導原則

    FPGA的基本設計原則,基本設計思想,基本操作技巧,常用模塊。如果大家有意識的用這些原則方法指導日后的的工作,那么會達到事半功倍
    發(fā)表于 02-18 11:53 ?1次下載

    良好接地指導原則

    良好接地指導原則
    發(fā)表于 12-15 22:19 ?0次下載

    Jeep大指揮官試駕,性能全面解析

    4月17日,廣汽菲克Jeep全新7座中型SUV——大指揮官正式上市,新車將推出兩種動力共計8款車型,官方指導價為27.98-40.98萬。
    發(fā)表于 05-28 00:27 ?3140次閱讀

    FPGA的指導原則詳細資料說明

    這一部分主要介紹 FPGA/CPLD設計的指導原則,如FPGA設計的基本原則、基本設計思想、基本操作技巧、常用模塊等。 FPGA/CPLD設計的基木原則、思想、技巧和常用模塊是一個非
    發(fā)表于 01-20 15:17 ?26次下載
    FPGA的<b class='flag-5'>指導</b>性<b class='flag-5'>原則</b>詳細資料說明

    REST端口支持構建動態(tài)REST請求來使用RESTful API網絡

    REST端口支持構建動態(tài)REST請求來使用RESTful API網絡服務。 概覽 REST端口暴露了一個簡單的接口來為REST請求構建頭、授權、主體和HTTP方法。請求體可以在端口配置
    的頭像 發(fā)表于 01-17 09:11 ?4670次閱讀

    REST API是什么,如何使用REST端口

    API是Application Programming Interface(應用程序接口)的縮寫,它是拿來描述一個類庫的特征或是如何去運用它。按照目前比較主流的分法,可以分為REST API和非
    的頭像 發(fā)表于 02-17 18:00 ?9010次閱讀
    <b class='flag-5'>REST</b> API是什么,如何使用<b class='flag-5'>REST</b>端口

    醫(yī)療器械軟件注冊技術審查指導原則

    指導原則是對醫(yī)療器械軟件的一般性要求,制造商應根據醫(yī)療器械軟件的特性提交注冊申報資料,判斷指導原則中的具體內容是否適用,不適用內容詳述理由。制造商也可采用其他滿足法規(guī)要求的替代方法,
    發(fā)表于 05-24 17:15 ?3次下載

    到底什么樣的REST才是最佳REST?

    說起 REST API,小伙伴們多多少少都有聽說過,但是如果讓你詳細介紹一下什么是 REST,估計會有很多人講不出來,或者只講出來其中一部分。
    的頭像 發(fā)表于 01-17 10:14 ?625次閱讀