什么是Restful API
REST是設計風格而不是標准。是指客戶端和服務器的交互形式。核心思想就是,客戶端發出的數據操作指令都是"動詞 + 賓語"的結構。
Restful API有幾個特性:
面向資源:接口命名都是zoos、animals,而不是getAllAnimals這樣的
使用Http動詞:GET/PUT/POST/DELETE/PATCH/HEAD/OPTIONS
,而不是我們日常只用的GET和POST
設計原則
1、在接口命名時應該用名詞,不應該用動詞,因為通過接口操作到是資源。
2、在url中加入版本號,利於版本迭代管理更加直觀
https://www.rgc.com/v1/
3、對於資源的操作類型應該是通過http動詞表示。
- GET /zoos:列出所有動物園
- POST /zoos:新建一個動物園
- GET /zoos/ID:獲取某個指定動物園的信息
- PUT /zoos/ID:更新某個指定動物園的信息(提供該動物園的全部信息)
- DELETE /zoos/ID:刪除某個動物園
- GET /zoos/ID/animals:列出某個指定動物園的所有動物
- DELETE /zoos/ID/animals/ID:刪除某個指定動物園的指定動物
4、HTTP Method分別對於資源的CURD操作
- GET(SELECT):從服務器取出資源(一項或多項)。
- POST(CREATE):在服務器新建一個資源。
- PUT(UPDATE):在服務器更新資源(客戶端提供改變后的完整資源)。
- PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
- DELETE(DELETE):從服務器刪除資源。
5、復數 URL,既然 URL 是名詞,那么應該使用復數,還是單數?
這沒有統一的規定,但是常見的操作是讀取一個集合,比如GET /articles(讀取所有文章),這里明顯應該是復數。
為了統一起見,建議都使用復數 URL,比如GET /articles/2要好於GET /article/2。
6、 避免多級 URL
常見的情況是,資源需要多級分類,因此很容易寫出多級的 URL,比如獲取某個作者的某一類文章。
GET /authors/12/categories/2
這種 URL 不利於擴展,語義也不明確,往往要想一會,才能明白含義。
更好的做法是,除了第一級,其他級別都用查詢字符串表達。
GET /authors/12?categories=2
下面是另一個例子,查詢已發布的文章。你可能會設計成下面的 URL。
GET /articles/published
查詢字符串的寫法明顯更好。
GET /articles?published=true
issues
1、如果是對一條記錄有多種動作怎么做呢?
這里有兩種方式:
- 第一種
POST /datas/1?action=reportError
POST /datas/1?action=mark
POST /datas/1?action=assign
- 第二種
POST /datas/1/reportError
POST /datas/1/mark
POST /datas/1/assign
以上兩種方式很明顯第二種會更好一點
2、client驗證用戶名或者電話是否存在,該如何設計?
可以設計成這樣
GET /users/{userName}?action=check
,對userName進行check操作
參考閱讀
http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html