Restful API設計規範

2020-11-15 FastCoder

RESTFUL是一種網絡應用程式的設計風格和開發方式,基於HTTP,可以使用XML格式定義或JSON格式定義。RESTFUL適用於移動網際網路廠商作為業務使能接口的場景,實現第三方OTT調用行動網路資源的功能,動作類型為新增、變更、刪除所調用資源。

RESTFUL特點包括:

1、每一個URI代表1種資源;

2、客戶端使用GET、POST、PUT、DELETE4個表示操作方式的動詞對服務端資源進行操作:GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源;

3、通過操作資源的表現形式來操作資源;

4、資源的表現形式是XML或者HTML;

5、客戶端與服務端之間的交互在請求之間是無狀態的,從客戶端到服務端的每個請求都必須包含理解請求所必需的信息。


在當前流行的前後端分離架構,人們發現原來這套用於超文本傳輸的協議是如此適合用於設計基於網際網路的api接口,基於http動詞以及標準的http status返回信息,能夠非常好地描述api的特性,並且可讀性非常好。更重要的是,由於http是事實上的網際網路通訊標準協議,基於rest設計的api接口,就好像你出國用英語和別人交流,完全不存在溝通障礙。
REST架構,從個人角度理解,核心做了兩件事情

  • 資源定位
  • 資源操作

其實從REST的定義中就能看出來,表述層對應的就是描述資源的位置(資源定位),狀態轉移就是對資源的狀態進行變更操作(增刪改查)
下面舉個實際的例子:
假設我們資料庫裡有一張User表,我們根據表建好了領域對象模型User,按照restful規範設計的接口應該是這樣的:

  • 新增用戶

[POST] /users

  • 修改用戶

[PUT] /users/{id}

  • 刪除用戶

[DELETE] /users/{id}

  • 查找全部用戶

[GET] /users

從這裡也能看出接口命名為對應表名的複數形式,並且[method] 是對應到如下


HTTP Method

rest的定義,第一條叫做資源定位,如果還不理解,那讓我們再想想URL的定義,叫做統一資源定位符,也就是說url是用來表示資源在網際網路上的位置的,所以說在url中不應該包含動詞,只能包含名詞。對資源的操作應該體現在http method上面,如果這樣理解還比較抽象的話,這裡不妨再打一個比方,比如在jane的網站有一張小汽車的圖片,地址是http://jane.com/img/car.jpg,現在jane想設計一個api接口,實現對這張圖片的刪除操作,這個api應該怎麼設計?根據rest的設計規範,很容易得出是

[DELETE] http://jane.com/img/car

嚴格地說,有些網址最後的".html"後綴名是不必要的,因為這個後綴名表示格式,屬於"表現層"範疇,而URI應該只代表"資源"的位置。它的具體表現形式,應該在HTTP請求的頭信息中用Accept和Content-Type欄位指定,這兩個欄位才是對"表現層"的描述。

除了HTTP METHOD,rest另外一套重要的規範就是HTTP STATUS,這套狀態碼規範定義了常規的api操作所可能產生的各種可能結果的描述,遵循這套規範,會使得你的api變得更加可讀,同時也便於各種網絡、基礎設施進行交易狀態監控。經常會用到的status code整理如下:

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 - [*]:伺服器發生錯誤,用戶將無法判斷發出的請求是否成功。

最後推薦大家github的api文檔:


完畢!!!


相關焦點

  • 使用flask-restful搭建API
    最簡單的例子訪問http://127.0.0.1:5000/ , 返回{"hello": "world"}from flask import Flaskfrom flask_restful import Resource, Apiapp = Flask(__name__)api = Api(app)class HelloWorld(Resource
  • 簡潔的 RESTful API 設計規範!整個人都清爽了
    RESTful 是目前最流行的 API 設計規範,用於 Web 數據接口的設計。它的大原則容易把握,但是細節不容易做對。本文總結 RESTful 的設計細節,介紹如何設計出易於理解和使用的 API。動詞+賓語RESTful的核心思想就是,客戶端發出的數據+操作指令都是「動詞+賓語」的結構,比如GET /articles這個命令,GET是動詞,/articles是賓語,動詞通常就有5種HTTP請求方法,對應CRUD操作,根據 HTTP 規範,動詞一律大寫。
  • RESTful API簡述
    概述寫出一個好的API接口不是一件簡單的事情,那麼如何寫出一個好的API接口就是一個比較棘手的問題,目前RESTFUL是最流行的API接口設計規範REST是Roy Thomas Fielding博士於2000年提出來的一種全球資訊網軟體架構風格,目的是便於不同軟體/程序在網絡中互相傳遞信息,從其誕生之日開始,它就因其可擴展性和簡單性受到越來越多的架構師和開發者們的青睞
  • 理解RESTful API 架構設計規範與實踐
    如果把網站,移動應用從伺服器到前端,從整體上看作是一個軟體,它就是一個層次清楚,功能強,擴展方便,適宜通信的架構規範。例如:https://www.sample.com/api/shops/10083 - 編號10083店鋪的基本信息https://www.sample.com/api/users/2372/orders - 編號2372用戶的所有訂單信息
  • RESTful API 設計指南
    RESTful API是目前比較成熟的一套網際網路應用程式的API設計理論。我以前寫過一篇《理解RESTful架構》,探討如何理解這個概念。今天,我將介紹RESTful API的設計細節,探討如何設計一套合理、好用的API。我的主要參考了兩篇文章(1,2)。
  • 實戰指南:10個有關RESTful API良好設計的最佳實踐
    作者:JDON連結:https://www.jdon.com/soa/10-best-practices-for-better-restful-api.htmlWeb API已經在最近幾年變成重要的話題,一個乾淨的API設計對於後端系統是非常重要的。
  • 如何設計restful風格接口
    restful風格接口URL定位資源,用HTTP動詞(GET,POST,DELETE,DETC)描述操作。識別(identify)、 表示(represent) 、交互(interact with)。看Url就知道要什麼看http method就知道幹什麼看http status code就知道結果如何1.
  • SpringBoot快速開發RESTful接口
    本節主要學習springboot + restful進行接口開發。協議:API與用戶的通信協議,總是使用http或https協議域名:應該儘量將API部署在專用域名之下,舉例:https://api.example.com如果確定API很簡單,不會有進一步擴展,可以考慮放在主域名下:https://example.org/api
  • smart-doc 1.9.4 發布,Java 零註解 API 文檔生成工具
    smart-doc是一款同時支持java restful api和apache dubbo rpc接口文檔生成的工具
  • smart-doc 1.9.6 發布,Java 零註解 API 文檔生成工具
    smart-doc是一款同時支持java restful api和apache dubbo rpc接口文檔生成的工具,smart-doc顛覆了傳統類似swagger這種大量採用註解侵入來生成文檔的實現方法
  • smart-doc 1.9.3 發布,Java 零註解 API 文檔生成工具
    smart-doc是一款同時支持java restful api和apache dubbo rpc接口文檔生成的工具,smart-doc顛覆了傳統類似swagger這種大量採用註解侵入來生成文檔的實現方法
  • ApiBoot v2.3.x 分支初版發布,走出重構源碼架構設計第一步
    ApiBoot依賴於SpringBoot,完全遵循SpringBoot自定義Starter的規範實現,可以使用ApiBoot構建獨立的Java應用程式,主要的職責是封裝並且落地項目中常用到的第三方依賴,未來會接入越來越多優秀的開源項目,提供統一的SpringBoot集成解決方案。
  • 非RESTful 的微軟 REST API 指南
    近日,微軟公開了他們的「微軟REST API指南2.3」,這是一份全面而成熟的規範。該規範被制定出來,主要是供Azure團隊在構建雲服務時使用。下面總結了微軟API指南的一些關鍵點,感興趣地讀者可以閱讀完整的規範。為了便於API的應用,URL應該是人類可讀和可構造的,而不必藉助客戶端庫。
  • 輕鬆寫出優雅的Restful風格API
    ;,method = RequestMethod.PATCH)二: Restful風格的由來  Rest(Representational State Transfer)全稱是表述性狀態轉移,它是由Roy Thomas Fielding博士在2000年提出的,它表示的是一種新的架構風格,一種輕量級,跨平臺,跨語言的架構設計
  • 如何使用 ThinkJS 優雅的編寫 RESTful API
    RESTful 是目前比較主流的一種用來設計和編排服務端API 的一種規範。之前使用 RESTful 的規範寫過不少 API 接口,我個人認為它最大的好處就是幫助我們更好的去規劃整理接口,如果還是按照以前根據需求來寫接口的話接口的復用率不高不說,整個項目也會變得非常的雜亂。
  • smart-doc 1.9.9 發布,Java 零註解 API 文檔生成工具
    smart-doc是一款同時支持java restful api和apache dubbo rpc接口文檔生成的工具,smart-doc顛覆了傳統類似swagger這種大量採用註解侵入來生成文檔的實現方法
  • 關於RESTful API安全
    RESTful API(應用程式接口)是符合RESTful規範的框架,用它可以實現跨平臺、廣泛覆蓋客戶端(包括瀏覽器和行動裝置)的HTTP服務。大多數網站提供API,以便開發人員可以在其上進行擴展開發,二次開發等。例如微信API,新浪微博API,百度APIStore,Github的API等。
  • smart-doc 2.0.0 重磅發布,Java 零註解 API 文檔生成工具
    smart-doc是一款同時支持java restful api和apache dubbo rpc接口文檔生成的工具,smart-doc顛覆了傳統類似swagger這種大量採用註解侵入來生成文檔的實現方法
  • API接口面試(第一篇)
    、restful格REST 全稱 REpresentation State Transfer,表現層狀態轉移restful:基於REST構建的API就是Restful格 RestfulAPI就是由後臺(SERVER端)來提供接,前端來調。
  • RESTful風格/RESTful Api/RESTful 架構?
    尊敬的讀者,記得加關注、點讚喲,您的認可是我最大的動力,謝謝RESTful是一種軟體架構風格、設計風格,不是標準,它只是提供了一組設計原則和約束條件。下面來了解一下RESTful風格是什麼?URI代表資源,資源的地址,資源的名稱,這就需要URI具有自描述性,可尋址性,給人一種見名知義的感覺,來看一下GitHub上的一些URI:URI設計參考:使用_或-來間隔單詞,提高URI可讀性;URI中可以帶版本號,區別版本使用/體現資源的層級關係;使用,;表示同級資源關係,也可以使用...;使用?