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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

REST的6大指導(dǎo)原則

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

1. 前言

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

REST API 也稱RESTful API, 其遵循REST架構(gòu)規(guī)范的應(yīng)用編程接口, 支持與RESTful WEB服務(wù)進(jìn)行交互。簡單來講就是:符合REST架構(gòu)風(fēng)格的 WEB API 或WEB 服務(wù)就是 REST API。

2. REST 的6大指導(dǎo)原則

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

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

3. 最佳實(shí)踐

3.1 API名稱

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

3.2 API的版本

API的版本應(yīng)該遵循, MAJOR.MINOR.PATCH的結(jié)構(gòu),即主要.次要.補(bǔ)丁 。

如果有重大的改動(dòng),導(dǎo)致前后的版本不兼容應(yīng)該升級(jí)主要版本, 比如從1.0 升級(jí)到2.0。

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

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

例如:

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

3.3提供準(zhǔn)確的API文檔

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

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

3.4資源路徑命名

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

3.5資源操作

RESTful API 使用HTTP 方法來對(duì)資源進(jìn)行操作,相對(duì)應(yīng)的一些常用操作如下:

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

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

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

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

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

    例如:PATCH: /schools/{school-id}/teachers  調(diào)整某個(gè)學(xué)校的老師
    

    舉個(gè)例子

    原有的資源如下:

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

    當(dāng)PATAH請(qǐng)求 如下:

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

    修改后的resource如下

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

3.6請(qǐng)求參數(shù)

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

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

總結(jié)

本篇介紹了一些REST API的一些食用方式,我們工作中可以根據(jù)一些各自的條件,作為參考。歡迎留言講講自己的一些實(shí)踐經(jīng)驗(yàn)!

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

    關(guān)注

    13

    文章

    4338

    瀏覽量

    86002
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9256

    瀏覽量

    85761
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1507

    瀏覽量

    62219
  • 編程接口
    +關(guān)注

    關(guān)注

    1

    文章

    38

    瀏覽量

    8001
  • REST
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    9428
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    新人報(bào)道,求各位大大指導(dǎo)

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

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

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

    FPGA設(shè)計(jì)的指導(dǎo)原則有哪些?需要注意什么?

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

    War3Rest.exe下載

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

    FPGA設(shè)計(jì)的指導(dǎo)原則

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

    REST學(xué)習(xí)

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

    設(shè)計(jì)復(fù)用的RTL指導(dǎo)原則

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

    FPGA設(shè)計(jì)的指導(dǎo)原則

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

    良好接地指導(dǎo)原則

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

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

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

    FPGA的指導(dǎo)原則詳細(xì)資料說明

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

    REST端口支持構(gòu)建動(dòng)態(tài)REST請(qǐng)求來使用RESTful API網(wǎng)絡(luò)

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

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

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

    醫(yī)療器械軟件注冊(cè)技術(shù)審查指導(dǎo)原則

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

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

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