什麼是restful api
目前比較成熟的一套互聯網應用程序的API設計理論
豆瓣電影api
應該儘量將API部署在專用域名之下
http://api.douban.com
/v2/user/1000001?apikey=XXX應該將API的版本號放入URL
http://api.douban.com/v2
/user/1000001?apikey=XXX在RESTful架構中,每個網址代表一種資源(resource),所以網址中
不能有動詞,只能有名詞
,而且所用的名詞往往與數據庫的表格名對應
。一般來說,數據庫中的表都是同種記錄的”集合”(collection),所以API中的名詞也應該使用複數。
http://api.douban.com/v2/book
/:id (獲取圖書信息)
http://api.douban.com/v2/movie
/subject/:id (電影條目信息)
http://api.douban.com/v2/music
/:id (獲取音樂信息)
http://api.douban.com/v2/event
/:id (獲取同城活動)對於資源的具體操作類型,由HTTP動詞表示。常用的HTTP動詞有下面四個(對應
增/刪/改/查
)。
GET(select
):從服務器取出資源(一項或多項)。
eg. 獲取圖書信息GET
http://api.douban.com/v2/book/:id\POST(
create
):在服務器新建一個資源。
eg. 用戶收藏某本圖書POST
http://api.douban.com/v2/book/:id/collectionPUT(
update
):在服務器更新資源(客戶端提供改變後的完整資源)。
eg. 用戶修改對某本圖書的收藏PUT
http://api.douban.com/v2/book/:id/collectionDELETE(
delete
):從服務器刪除資源。
eg. 用戶刪除某篇筆記DELETE
http://api.douban.com/v2/book/annotation/:id如果記錄數量很多,服務器不可能都將它們返回給用戶。API應該提供參數,過濾返回結果
?limit=10:指定返回記錄的數量*
eg. 獲取圖書信息GET
http://api.douban.com/v2/book/:id?limit=10
服務器向用戶返回的狀態碼和提示信息
每個狀態碼代表不同意思, 就像代號一樣2系 代表正常返回
4系 代表數據異常
5系 代表服務器異常
錯誤碼 | 錯誤信息 | 含義 | 狀態碼 |
---|---|---|---|
6000 | book_not_found | 圖書不存在 | 404 |
6002 | unauthorized_error | 沒有修改權限 | 403 |
6004 | review_content_short(should more than 150) | 書評內容過短(需多於150字) | 400 |
6006 | review_not_found | 書評不存在 | 404 |
6007 | not_book_request | 不是豆瓣讀書相關請求 | 403 |
6008 | people_not_found | 用戶不存在 | 404 |
6009 | function_error | 服務器調用異常 | 400 |
6010 | comment_too_long(should less than 350) | 短評字數過長(需少於350字) | 400 |
6011 | collection_exist(try PUT if you want to update) | 該圖書已被收藏(如需更新請用PUT方法而不是POST) | 409 |
6012 | invalid_page_number(should be digit less than 1000000) | 非法頁碼(頁碼需要是小於1000000的數字) | 400 |
6013 | 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
爲時間戳加密後的字符串, 加密規則只有你們技術團隊自己知道
參考資料
聯繫作者
- CSDN博客:http://blog.csdn.net/u012104219
- 知乎專欄:https://zhuanlan.zhihu.com/frankfeekr
- Github:https://github.com/frank-lam
- Email:[email protected]
如果你覺得不錯的話,不妨打賞一下,這樣我就有更大的動力去完善它,優化它。