十个书写Node.js REST API的最佳实践(上)
收錄待用,修改轉載已取得騰訊云授權
原文:10 Best Practices for Writing Node.js REST APIs
我們會通過本文介紹下書寫Node.js REST API的最佳實踐,包括各個主題,像是命名路由、認證、黑盒測試以及對相關資源使用合適的緩存頭。
對于Node.js來說最流行的一個用例就是用其來書寫RESTful API。盡管如此,當我們使用監控工具來幫助用戶排查問題時,我們總是能感受到在REST API上開發者們有很多的問題。
我希望這些最佳實踐能夠對你有所幫助。
1. 使用HTTP方法和API路由
設想一下你正在構建Node.js RESTful API用以用來創建、更新、獲取或者刪除用戶。這些操作HTTP已經有可以勝任的工具集:POST,PUT, GET, PATCH 或 DELETE。
作為最佳實踐,你的API路由應該一直使用名詞作為資源id。涉及到用的資源相關的,路由機制也可以這樣:
POST /user 或者 PUT /user:/id 來創建新用戶
GET /user 來獲取列表的用戶
GET /user/:id 來獲得某一個用戶
PATCH /user/:id 來修改已有的用戶記錄
DELETE /user/:id 來刪除一個用戶
2. 正確地使用HTTP狀態碼
如果處理請求時出了問題,你必須在響應里設置正確的狀態碼:
2xx,如果一切都ok
3xx,如果資源被移除
4xx,如果因為服務器錯誤導致請求無法實現 (例如請求一個不存在的資源)
5xx, 如果API測出現問題 (例如異常發生)
如果你正在使用Express,設置狀態碼就是這么簡單 res.status(500).send({error: 'Internal server error happened'})。 和使用Restify很類似:res.status(201).
查看list of HTTP status codes以尋求完整列表
3.使用HTTP頭來設置Medata
使用HTTP頭把metadata加到要發送的負載上。像這樣的頭可以是在如下信息的上:
頁碼
速率限制
或者是認證.
標準化HTTP頭的列表可以在 這里 被找到。
如果你需要在你的相應頭里面設置任何自定義的metadata,給它們加上X前綴是最佳實踐。例如,之前如果你在使用CSRF token時,把其命名為X-Csrf-Token是很普遍(但不標準)的做法。無論如何隨著RFC 6648的發布,這些都已經被廢棄了。新API最好不要使用會和其他應用發生沖突的header名。例如,OpenStack在它們的header前加上了OpenStack:
OpenStack-Identity-Account-ID OpenStack-Networking-Host-Name OpenStack-Object-Storage-Policy需要注意的是HTTP標準里并沒有任何header尺寸限制的定義;然而,出于實際原因Node.js對header對象添加了80KB大小的限制。
“不要讓HTTP header(包括狀態行)超過HTTP_MAX_HEADER_SIZE。這一檢查是為了保護嵌入機免受拒絕服務攻擊,這一攻擊里攻擊者可以給我們發送一個沒有結尾的header,這會導致嵌入機一直緩沖”
來自 Node.js HTTP 解析器
4 為你的Node.js REST API挑選合適的框架
挑選最適合你用例的框架是很重要的。
Express, Koa 亦或是 Hapi
Express,Koa和Hapi 可以被用來創造瀏覽器應用,同樣的,它們支持模版和渲染 —— 只需要來命名幾個特性。如果你的應用也需要提供用戶界面,使用它們很有必要。
Restify
另一方面,Restify致力于幫助你構建REST服務。其存在的意思便在于讓你構建“嚴格的”可維護可觀察的API服務。Restify同樣可以和自動化的DTrace協作支持你所有的handler。
Restify主要被用于像npm或者Netflix的應用生產里。
接下篇《十個書寫Node.js REST API的最佳實踐(下)》
原文鏈接:https://www.qcloud.com/community/article/266459
轉載于:https://www.cnblogs.com/liuliliuli2017/p/6809170.html
總結
以上是生活随笔為你收集整理的十个书写Node.js REST API的最佳实践(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zoj How Many Shortes
- 下一篇: java中的jdk切换(无需卸载原有jd