前後端對接其實主要是面向 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定義了由服務提供的抽象介面...