十个书写Node.js REST API的最佳实践(上)
2017-05-04 21:25
751 查看
收录待用,修改转载已取得腾讯云授权
原文:10 Best Practices for Writing Node.js REST APIs
我们会通过本文介绍下书写Node.js REST API的最佳实践,包括各个主题,像是命名路由、认证、黑盒测试以及对相关资源使用合适的缓存头。
对于Node.js来说最流行的一个用例就是用其来书写RESTful API。尽管如此,当我们使用监控工具来帮助用户排查问题时,我们总是能感受到在REST API上开发者们有很多的问题。
我希望这些最佳实践能够对你有所帮助。
作为最佳实践,你的API路由应该一直使用名词作为资源id。涉及到用的资源相关的,路由机制也可以这样:
如果你正在使用Express,设置状态码就是这么简单
查看list of HTTP status codes以寻求完整列表
页码
速率限制
或者是认证.
标准化HTTP头的列表可以在 这里 被找到。
如果你需要在你的相应头里面设置任何自定义的metadata,给它们加上X前缀是最佳实践。例如,之前如果你在使用CSRF token时,把其命名为
需要注意的是HTTP标准里并没有任何header尺寸限制的定义;然而,出于实际原因Node.js对header对象添加了80KB大小的限制。
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
原文: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大小的限制。
“不要让
来自 Node.js HTTP 解析器
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
相关文章推荐
- 十个书写Node.js REST API的最佳实践(上)
- 十个书写Node.js REST API的最佳实践(下)
- 十个书写Node.js REST API的最佳实践(下)
- 编写 Node.js Rest API 的 10 个最佳实践
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.1.REST(表述性状态传递)Representational State Transfer
- 【转】再谈RESTAPI最佳实践
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.2.项目依赖
- Rest API 设计最佳实践(1)
- 虚拟研讨会:Node.js生态系统之框架、库、最佳实践
- 再谈RESTAPI最佳实践
- Node.js项目实战-构建可扩展的Web应用(第一版):8 使用Express.js和Hapi构建Node.js REST API服务
- Node.js+MongoDB对于RestfulApi中用户token认证实践
- 再谈RESTAPI最佳实践
- 再谈RESTAPI最佳实践
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.4.重构:使用Hapi搭建REST API服务器
- Node.js 开发Rest的Api示例项目(二)
- js-新兴的API,最佳实践,离线应用于客户端存储
- [转] 虚拟研讨会:Node.js生态系统之框架、库、最佳实践
- Rest API 设计最佳实践(3)
- 使用Node.js和MongoDB通过Mongoshin和Express.js构建JSON REST API服务器