Nodejs 求对比 restify 和 express

Nodejs 求对比 restify 和 express

如题,我个人是偏好 express 的,但是团队里有一些其他人负责的项目用的是 restify, 我在改 restify 的项目的时候感觉很不爽,不知道是不是我没有掌握正确的使用方法,想听听大家的意见。

restify 上的「Why use restify and not express」里提到的理由似乎都不是很合理:

  • express 4 中已经对 RESTful 有很好的支持了
  • express 的模板引擎是可选的,不能因为 express 有模板引擎的支持就说 express 不适合 API Server 啊

然后 express 的 Router#param 是个很好用的东西,但是 restify 似乎没有这个功能;然后 restify 似乎有很好的 DTrace 支持,但是我不是很清楚这个东西的价值在哪方面。


9 回复

Node.js: 对比 Restify 和 Express

背景

在 Node.js 生态系统中,Express 和 Restify 都是非常流行的框架。Express 以其简洁易用而闻名,而 Restify 则更专注于构建高性能的 RESTful API。两者各有优劣,适用于不同的场景。

Express vs. Restify

Express

Express 是一个轻量级的 Web 应用框架,提供了许多内置功能和中间件,使得开发者可以快速地构建 Web 应用和 API。它具有以下优点:

  1. 易用性:Express 提供了非常直观的 API,使得开发过程变得简单。
  2. 中间件:Express 拥有大量的中间件,可以方便地处理各种任务,例如日志记录、错误处理等。
  3. 路由参数:Express 提供了 Router#param 方法,允许你在路由之前执行一些预处理逻辑。

示例代码:

const express = require('express');
const app = express();

app.use((req, res, next) => {
    console.log(`Request URL: ${req.url}`);
    next();
});

app.param('id', (req, res, next, id) => {
    req.id = parseInt(id);
    next();
});

app.get('/users/:id', (req, res) => {
    res.send(`User ID: ${req.id}`);
});

app.listen(3000, () => console.log('Server running on port 3000'));

Restify

Restify 是一个专门为构建 RESTful 服务而设计的框架。它专注于性能和可靠性,提供了一些专门用于 API 开发的功能。以下是 Restify 的主要特点:

  1. 性能:Restify 在处理大量请求时表现出色,特别是在高并发场景下。
  2. DTrace 支持:Restify 内置了对 DTrace(一种动态跟踪工具)的支持,可以用来监控和调试应用。
  3. 自动 MIME 类型处理:Restify 可以根据请求头自动选择合适的响应格式(如 JSON 或 XML)。

示例代码:

const restify = require('restify');

const server = restify.createServer();
server.use(restify.plugins.acceptParser(server.acceptable));
server.use(restify.plugins.queryParser());
server.use(restify.plugins.bodyParser());

server.param('id', (req, res, next, id) => {
    req.id = parseInt(id);
    next();
});

server.get('/users/:id', (req, res, next) => {
    res.send({ id: req.id });
    next();
});

server.listen(3000, () => console.log('Server running on port 3000'));

总结

  • 如果你更注重开发效率和易用性,可以选择 Express。
  • 如果你需要构建高性能的 RESTful API,并且需要更好的监控和调试能力,Restify 是一个不错的选择。

希望这些示例代码和说明能够帮助你更好地理解和选择适合你的框架。


express 4 对于 restful 已经有很好的支持了,而且也已经很薄了。

真没感觉 restify 有什么好。

以我浅薄的理解:一个是API框架,一个是Web框架,后者有模板,需要预编译和其他的一些工作,也就是说在启动时耗时要比前者长,作为API server的话两者应该都可以,不过restify毕竟是专门的RESTful API框架,在稳定性、可调试和监控方面应该做的不错。 DTrace是应用监控用的,我也不太了解。

不起页面 -> restify 需要页面 -> express

restify的log很好用. (集成了bunyan) req中自带log, 传给其他函数很好用. Snap1.png

相对于 3.x 的 express 来说,restify 应该偏轻吧。

restify针对API server的场景做了许多expressjs没有做的事,比如版本控制,错误提示,以及restify的一系列中间件,还有就是DTrace,频率限制,性能监控,日志等等。

都是没用的东西!

要说真正能帮到你的也就只有路由这一项,其ta的东西,你真正的项目,这些框架提供的功能都有限,确切的说是不够,非常的不够,而其API设计的又非常臃肿难扩展。

nodejs的几个框架,是看了jQuery的蛋糕做的甜,想学习jQuery,结果是搬起石头砸自己的脚。Yahoo一个开发曾经说过jQuery不适合开发大型项目,这话是对的,但是jQuery面对的是一个页面,一个页面再大也大不过天去,所以jQuery生存得很好。

但是这几个框架都是形而上的错误。模仿jQuery模仿的实在不敢恭维,如果能做到nodejs源码的纯净组装结构,也算是Java中的Spring了,只可惜这几个框架都不怎么样。

(其中最烂的设计,烂到不能再烂的莫过于Express的 set()和get() 这两个接口了!!! 这不只是猩猩和香蕉的纠结了,而且是要带上猩猩的整个星球!!! 当你和别人协作时,你压根不知道,你去get()的时候会得到什么样的稀奇古怪的东西!!! 尤其是和糟糕的人组队,你绝对会有无数次会说,这TM到底是什么???!!!)

(当我自己工作的时候,我是绝对不会选择这些框架的,当我和别人一起的时候,我不得不面向选择一个框架,但是也要造好一堆堆的围墙,尽可能的保护好自己的代码,并且尽可能的猜测对方又制造了什么样的神奇之物!!!)

我倒是期待Douglas哪天闲不住了,能出套像样的工具。

楼主大概是想问,在性能方面哪个在并发访问上更快、吞吐量更大。 国外有个测评说前1000个并发访问restify有点反应卡顿,但又有人测评没这回事。 总体来说Restify是专业做RESTful的 该更强大些, 除非你的项目里同时整合了网页和REST API就用Express 。

Node.js 求对比 restify 和 express

介绍

ExpressRestify 都是用于构建 Web 应用和 API 的 Node.js 框架。尽管它们都可以用于处理 HTTP 请求和响应,但它们的设计目标和适用场景有所不同。

Express

Express 是一个轻量级且灵活的 Web 应用框架,适用于多种用途,包括构建网站、单页应用(SPA)和 API。它拥有丰富的中间件和路由系统,能够方便地处理各种复杂的业务逻辑。

优点:

  • 灵活性高,适用于各种应用场景。
  • 拥有庞大的社区和丰富的中间件生态系统。
  • 路由参数处理非常方便(例如 Router#param)。

缺点:

  • 对于纯粹的高性能 API 服务,Express 可能会带来一些额外的开销。

Restify

Restify 是专门为构建高性能 API 而设计的框架。它的设计理念更偏向于性能和可维护性,提供了许多针对 API 开发优化的功能,如版本控制、请求验证等。

优点:

  • 专门针对高性能 API 服务设计。
  • 支持 DTrace(动态跟踪工具),便于调试和性能分析。
  • 内置版本控制和请求验证等功能。
  • 优秀的资源管理和路由机制。

缺点:

  • 功能相对专一,不适合处理复杂的网页应用。
  • 学习曲线可能比 Express 稍微陡峭一些。

示例代码

Express 示例
const express = require('express');
const app = express();

app.get('/api/users/:id', (req, res) => {
    const userId = req.params.id;
    // 处理用户 ID 的逻辑
    res.json({ user_id: userId });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
Restify 示例
const restify = require('restify');

const server = restify.createServer();
server.use(restify.plugins.acceptParser(server.acceptable));
server.use(restify.plugins.queryParser());
server.use(restify.plugins.bodyParser());

server.get('/api/users/:id', (req, res, next) => {
    const userId = req.params.id;
    // 处理用户 ID 的逻辑
    res.send({ user_id: userId });
    return next();
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

总结

如果你正在开发一个需要高性能和稳定性的 API 服务,Restify 是一个不错的选择。如果你的应用需求更复杂,涉及到网页渲染和多页面应用,Express 可能更适合你。不过,无论是选择哪个框架,关键是根据实际需求和团队熟悉度来决定。

回到顶部