我希望建立一个具有以下特征的API服务器:
- 只提供JSON/XML HTTP请求(不提供网页)。
- 主要是DB密集型,而不是CPU密集型。
- 应该是高度可扩展的
- 具有多功能的前端:web浏览器,本机移动(Android和iOS目前)
我有Apache Tomcat, httpd, MySQL和PHP的经验,所以这些显然是我的默认选择。但是,在自动跳转到这里之前:
对于这种类型的服务器,你会推荐任何其他技术 (Node.js, Rails…)吗?
我最感兴趣的是性能/可伸缩性相关的优点/缺点
DB密集型意味着它是IO密集型的。Node.js提供异步IO,作为奖励,JavaScript原生使用json。
查看资源:http://www.nodecloud.org/
这里有一个简单的例子让你开始:
var express = require('express');
var Client = require('mysql').Client,
sqlclient = new Client(),
sql_database = '...';
sqlclient.host = '...';
sqlclient.user = '...';
sqlclient.password = '..';
sqlclient.connect( function (err) {
if( err ) {
throw(err);
}
console.log('connected to mysql on ...');
});
var query = 'SELECT . . . ';
var app = express.createServer();
app.get('/', function (req, res, next) {
sqlclient.query('USE '+sql_database);
sqlclient.query( query, function (err, results, fields) {
res.send(JSON.stringify(results));
});
});
app.listen( 3000 );
我个人会使用node.js。
只提供JSON/XML HTTP请求网页)。
现在大多数API只支持JSON,我建议你也这样做。在node.js中创建JSON就像在对象上调用JSON.stringify
一样简单。
主要是DB密集型的,不是那么多CPU密集型。
node.js做非阻塞IO,有很好的性能与一些数据库,如redis, mongodb。
应该是高度可伸缩的
node.js是非常快的,如果单个盒子不能切割它,你可以使用NGinx来扩展,但可能一个单独的盒子就足够了。
具有多功能前端:网页浏览器,原生移动设备(Android)和iOS)
我认为你的API应该像大多数其他API一样提供oauth。我认为这是node.js唯一的问题,因为只有一个库可用,我不知道这个包的质量
Rails是开箱即用的。它对JSON响应有很好的支持,无与伦比的ORM用于处理和抽象数据库交互内容,并根据资源组织代码。
快捷方式:查找as_json
方法