Server的API如何設計才知足RESTful要求?api
首先是簡潔版裏面的那幾點。外加一些附帶的 best practices:
1. URL root:
https://example.org/api/v1/*
https://api.example.com/v1/*
2. API versioning:
能夠放在URL裏面,也能夠用HTTP的header:
/api/v1/
3. URI使用名詞而不是動詞,且推薦用複數。
BAD
/getProducts
/listOrders
/retrieveClientByOrder?orderId=1
GOOD
GET /products : will return the list of all products
POST /products : will add a product to the collection
GET /products/4 : will retrieve product #4
PATCH/PUT /products/4 : will update product #4
4. 保證 HEAD 和 GET 方法是安全的,不會對資源狀態有所改變(污染)。好比嚴格杜絕以下狀況:
GET /deleteProduct?id=1
5. 資源的地址推薦用嵌套結構。好比:
GET /friends/10375923/profile
UPDATE /profile/primaryAddress/city
6. 警戒返回結果的大小。若是過大,及時進行分頁(pagination)或者加入限制(limit)。HTTP協議支持分頁(Pagination)操做,在Header中使用 Link 便可。
7. 使用正確的HTTP Status Code表示訪問狀態:HTTP/1.1: Status Code Definitions
8. 在返回結果用明確易懂的文本(String。注意返回的錯誤是要給人看的,避免用 1001 這種錯誤信息),並且適當地加入註釋。
9. 關於安全:本身的接口就用https,加上一個key作一次hash放在最後便可。考慮到國情,HTTPS在無線網絡裏不穩定,能夠使用Application Level的加密手段把整個HTTP的payload加密。有興趣的朋友能夠用手機連上電腦的共享Wi-Fi,而後用Charles監聽微信的網絡請求(發照片或者刷朋友圈)。
若是是平臺的API,能夠用成熟可是複雜的OAuth2。安全