十个书写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,如果一切都ok3xx,如果资源被移除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,这会导致嵌入机一直缓冲”
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的最佳实践(下)
收录待用,修改转载已取得腾讯云授权 5. 对你的Node.js REST API进行黑盒测试 测试你的REST API最好的方法之一就是把它们当成黑盒对待. 黑盒测试是一种测试方法,通过这种方法无需知 ...
- 编写 Node.js Rest API 的 10 个最佳实践
Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由.进行认证和测试等话题,内容摘要如下 ...
- AngularJS 授权 + Node.js REST api
作者好屌啊,我不懂的他全都懂. Authentication with AngularJS and a Node.js REST api 几个月前,我开始觉得 AngularJS 好像好牛逼的样子,于 ...
- Node.js RESTful API
什么是REST架构? REST表示代表性状态传输.REST是一种基于Web标准的架构,并使用HTTP协议. 它都是围绕着资源,其中每一个组件是资源和一个资源是由一个共同的接口使用HTTP的标准方法获得 ...
- Practical Node.js (2018版) 第8章:Building Node.js REST API Servers
Building Node.js REST API Servers with Express.js and Hapi Modern-day web developers use an architec ...
- Node.js 常用 API
Node.js v6.11.2 Documentation(官方文档) Buffer Prior to the introduction of TypedArray in ECMAScript 20 ...
- 使用Node.js原生API写一个web服务器
Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...
- node.js使用express框架进行文件上传
关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...
- (转)RESTful API 设计最佳实践
原文:http://www.oschina.net/translate/best-practices-for-a-pragmatic-restful-api 数据模型已经稳定,接下来你可能需要为web ...
随机推荐
- 【ASP.NET】编写自己的Web服务器
自己写一个简单的Web服务器,对加深理解Http协议有很好的帮助,下面就看一下一个基于TcpListener的Web服务器: class Program { static void Main(stri ...
- postman自动生成签名
查看详细图文教程↓ 一.全局变量方式 1. 在全局变量添加key:value分别是autoSign和var sign={toUnicode:function(s){return s.replace(/ ...
- linux 把ls -R格式化成树状结构
谁能写脚本把linux中的ls -R命令的结果格式化成树状结构? 最好是shell脚本!欢迎讨论! 参与讨论有可能意外获取iPhone6哦~~
- 用vue-wechat-title为微信动态设置标题
1.安装插件 cnpm install vue-wechat-title --save 2.在main.js中引入 Vue.use(require('vue-wechat-title')) 3.在路由 ...
- js的循环
1.for(){} 这种方法可能每个人都用过,不多说. 2.ES5的forEach myArray.forEach(function (value) { console.log(value); }); ...
- 推荐2本学习java书和PDF
推荐2本学习java书和PDF下载地址 <深入理解Java虚拟机:JVM高级特性与最佳实践>共分为五大部分,围绕内存管理.执行子系统.程序编译与优化.高效并发等核心主题对JVM进行了全面而 ...
- 验证Xcode真伪的方法,来自苹果官网
验证Xcode真伪的方法,来自苹果官网 Xcode的验证你的版本 2015年9月22日 注意:中文为有道翻译,看下验证方法即可. 我们最近将应用程序从应用程序商店,还建有Xcode的假冒 ...
- JS延迟执行
<!DOCTYPE html> <html> <head> <title></title> <script type="te ...
- hp
命令组成hpacucli [parameter=value] 查看: 查看所有控制器状态 hpacucli ctrl all show 查看slot 0阵列信息详细状态 (可以查看物理磁盘和逻辑磁盘的 ...
- 初识Linux 基础操作(2)
1.Linux启动流程 1).linux启动过程 ①.进入grub界面选择相应的启动内核 ②.读取kernel内核文件-/boot/vmlinuz-* ...