以豆瓣網為例,講解restful api設計規範

2021-08-18 09:23:57 字數 2955 閱讀 8479

目前比較成熟的一套網際網路應用程式的api設計理論
應該盡量將api部署在專用網域名稱之下

/v2/user/1000001?apikey=***

應該將api的版本號放入url

/v2/user/1000001?apikey=***

在restful架構中,每個**代表一種資源(resource),所以**中不能有動詞,只能有名詞,而且所用的名詞往往與資料庫的**名對應。一般來說,資料庫中的表都是同種記錄的」集合」(collection),所以api中的名詞也應該使用複數。

/v2/book/:id (獲取圖書資訊)

/v2/movie/subject/:id (電影條目資訊)

/v2/music/:id (獲取**資訊)

/v2/event/:id (獲取同城活動)

對於資源的具體操作型別,由http動詞表示。常用的http動詞有下面四個(對應增/刪/改/查)。

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

eg. 獲取圖書資訊get/v2/book/:id\

postcreate):在伺服器新建乙個資源。

eg. 使用者收藏某本圖書post/v2/book/:id/collection

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

eg. 使用者修改對某本圖書的收藏put/v2/book/:id/collection

deletedelete):從伺服器刪除資源。

eg. 使用者刪除某篇筆記delete/v2/book/annotation/:id

如果記錄數量很多,伺服器不可能都將它們返回給使用者。api應該提供引數,過濾返回結果

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

eg. 獲取圖書資訊get/v2/book/:id?limit=10

伺服器向使用者返回的狀態碼和提示資訊

每個狀態碼代表不同意思, 就像代號一樣

2系 代表正常返回

4系 代表資料異常

5系 代表伺服器異常

錯誤碼錯誤資訊

含義狀態碼

6000

book_not_found

圖書不存在

4046002

unauthorized_error

沒有修改許可權

4036004

review_content_short(should more than 150)

書評內容過短(需多於150字)

4006006

review_not_found

書評不存在

4046007

not_book_request

不是豆瓣讀書相關請求

4036008

people_not_found

使用者不存在

4046009

function_error

伺服器呼叫異常

4006010

comment_too_long(should less than 350)

短評字數過長(需少於350字)

4006011

collection_exist(try put if you want to update)

該圖書已被收藏(如需更新請用put方法而不是post)

4096012

invalid_page_number(should be digit less than 1000000)

非法頁碼(頁碼需要是小於1000000的數字)

4006013

chapter_too_long(should less than 100)

章節名過長(需小於100字)

400

200(正常)

表示一切正常,返回的是正常請求結果。

302/307(臨時重定向)

指出被請求的文件已被臨時移動到別處,此文件的新的url在location響應頭中給出。

304(未修改)

表示客戶機快取的版本是的,客戶機應該繼續使用它。

403(禁止)

伺服器理解客戶端請求,但拒絕處理它。通常由於伺服器上檔案或目錄的許可權設定所致。

404(找不到)

伺服器上不存在客戶機所請求的資源。

500(內部伺服器錯誤)

伺服器端的cgi、asp、jsp等程式發生錯誤。

api的身份認證應該使用oauth 2.0框架。

技術團隊自己約定的規則

- 增加兩個引數time,token

-time為時間戳, 用於判斷介面請求是否超時

-token為時間戳加密後的字串, 加密規則只有你們技術團隊自己知道

如果你覺得不錯的話,不妨打賞一下,這樣我就有更大的動力去完善它,優化它。

程式設計正規化 以炒菜為例,講解各種程式設計正規化

過程式程式設計 生活的經驗告訴我們以下的物理現實,事情是按照時間的順序乙個步驟接乙個步驟的發展。程式設計裡有乙個正規化就模擬了這樣的經驗,就是過程式程式設計。如果現在有一些剛從超市買回來的菜,要吃進肚子,按照過程式程式設計,可以如下表示 洗 菜 切 菜 炒 菜 吃 菜 以上的 中,括號外為動詞,括號...

以炒公尺粉為例,講解瀑布和敏捷的區別

很多專案推行敏捷開發很長一段時間,仍然弄不清楚瀑布和敏捷到底有什麼區別,這裡以炒公尺粉為例,講解兩者的區別。瀑布 就是自己在家裡炒公尺粉 家裡炒公尺粉,一般是按照以下流程 先準備好足量的公尺粉 胡蘿蔔 蔥 白菜 然後切胡蘿蔔絲 白菜絲 蔥,同時用開水泡公尺粉 接著下油鍋,胡蘿蔔絲 白菜絲等一起翻炒,...

jBPM持久化(以MySQL為例)

1 在mysql裡新建一資料庫,名為jbpm create database jbpm 名字可以任意,後面要用到。3 將mysql的jdbc驅動mysql connector.jar拷貝到jbpm資料夾的lib mysql下,沒有mysql資料夾則新建乙個。4 在jbpm資料夾的src resour...