RESTful API 設計入門

2021-08-01 14:03:12 字數 2296 閱讀 8940

前後端對接其實主要是面向 api 文件開發,而 api 的設計中,有一種 restful api 的設計,具有規範,從某一種角度,我覺得 restful api 可以很好的把後端 api 從繁雜的業務中抽象出來,更好地進行管理和編寫,同時也具有良好的可讀性。

對於一些現代化的 mvc 框架,在腳手架階段可能就會自動生成 restful 風格的 controller。

資源的拆分

路由中 uri 中的資源都是名詞,即乙個個實體,對於**而言,可以看做乙個個類到 uri 的對映,比如:

get /users/:userid/:info

get /companys

http 動詞

對於 restful api 中,常用的動詞有以下幾種:

get(select):從伺服器取出資源(一項或多項)。

post(create):在伺服器新建乙個資源。

put(update):在伺服器更新資源(客戶端提供改變後的完整資源)。

patch(update):在伺服器更新資源(客戶端提供改變的屬性)。

delete(delete):從伺服器刪除資源。

put 和 patch 的區別主要在於更新整個資源還是更新區域性資源。

版本

當 api 可能出現重大變更,無法向後相容時,restful api 提供了版本花的概念,可以保證舊版和新版的 api 的使用,有三種方法存放版本號:

沒有版本號的 api 並不是乙個好的 restful api(對不起我又設計了辣雞的 api)。

過濾

api 應該提供一定的篩選條件,比如:

?limit=10:指定返回記錄的數量

?offset=10:指定返回記錄的開始位置。

?page=2&per_page=100:指定第幾頁,以及每頁的記錄數。

?sortby=name&order=asc:指定返回結果按照哪個屬性排序,以及排序順序。

?animal_type_id=1:指定篩選條件

狀態碼

伺服器返回的狀態碼應該復合 http 的規範,比如:

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

返回 json

restful api 應該盡可能的返回 json,對於錯誤的請求,需要為使用者提供錯誤的資訊。

不進行無意義的包裝

body 只需要直接返回資料,不需要進行包裝比如:

,

}

不止於 restful

儘管 restful api 的設計規範清晰可讀,但是針對一些特殊的需求,我們可能也不一定要強制遵守 restful api 的設計規範。比如批量刪除,delete 在 http 規範中是沒有引數的,這就給批量刪除介面帶來了一定的麻煩,可以考慮改用 post。

參考資料

需求設計入門

我正式參加的第乙個專案是移動渠道運營,由於公司人手不夠,老大將渠道資源的大模組交給我乙個人來負責,由於之前的詳細設計極為粗略,庫表設計也沒有,所以一切就得自己來搞定了。開發過程中與客戶進行過2次粗略的互動,可由於我是新手,對移動業務很是不熟悉,他們的需求我難以全部消化。兩個月後一期開發完畢,昨天在現...

Hbase roekey設計入門

rowkey類似於主鍵,可以唯一的標識一行記錄 由於資料按照rowkey的字典序 byte order 排序儲存,因此hbase中的資料永遠都是有序的。rowkey可以由使用者自己指定,只要保證這個字串不重複就可以了。不可以 會被覆蓋 hbase main 006 0 put csdn emp rk...

WSDL檔案設計入門

在 wsdl 中,服務被定義為三個截然不同的部分 服務的位址,組成,繫結 在 wsdl 中,服務被定義為三個截然不同的部分 port port 定義了可用服務的實際位置 端點 例如,soap 服務所在的 http url。porttype 功能 服務的組成 porttype定義了由服務提供的抽象介面...