Node.js RESTful API
Node.js RESTful API文档
简介
RESTful API是一种基于HTTP协议的API设计风格,常被用于Web服务的开发中。Node.js作为一种服务器端运行环境,也可用于创建RESTful API。
本文档旨在介绍如何使用Node.js和Express框架,创建一个简单的RESTful API。
安装和配置
在开始创建RESTful API前,需要安装和配置Node.js和Express框架。以下是一些相关资源:
- Node.js官方网站:https://nodejs.org/
- Express框架官方网站:https://expressjs.com/
- npm官方网站:https://www.npmjs.com/
安装过程很简单,我们不再赘述。
创建API
创建API的第一步是定义路由。路由决定了用户发起的请求应该由哪个处理器函数来处理。
Express框架提供了一个方便的方式来定义路由。以下是一个简单的样例:
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.send('Hello World');
});
var server = app.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});
上面的代码创建了一个Express应用程序,并简单的定义了一个根路由,当用户访问服务器时,会返回一句Hello World。
接下来,我们将为API添加更多的路由。以下是一个从服务器获取用户的列表信息的代码:
app.get('/users', function(req, res) {
var userList = [
{ name: 'Alice', age: 25 },
{ name: 'Bob', age: 30 }
];
res.json(userList);
});
上面的代码定义了一个/users路由,当用户请求这个路由时,服务器将返回一个用户列表JSON数组。
使用HTTP方法
RESTful API是基于HTTP协议的API设计风格。HTTP方法(也称为“谓词”)决定了请求的类型。常见的HTTP方法有:
- GET:获取资源
- POST:创建资源
- PUT:更新资源
- DELETE:删除资源
我们可以在路由定义中使用这些方法。以下是一个使用HTTP方法的样例:
// GET /users/123
app.get('/users/:id', function(req, res) {
var user = findUserById(req.params.id);
if (user) {
res.json(user);
} else {
res.status(404).send('User not found');
}
});
// POST /users
app.post('/users', function(req, res) {
addUser(req.body);
res.sendStatus(201);
});
// PUT /users/123
app.put('/users/:id', function(req, res) {
var user = updateUserById(req.params.id, req.body);
if (user) {
res.json(user);
} else {
res.status(404).send('User not found');
}
});
// DELETE /users/123
app.delete('/users/:id', function(req, res) {
var success = deleteUserById(req.params.id);
if (success) {
res.sendStatus(204);
} else {
res.status(404).send('User not found');
}
});
上面的样例演示了如何使用HTTP方法来处理不同类型的请求。例如,当客户端使用GET方法请求/users/:id,服务器将返回某个用户的信息。当使用POST方法请求/users,服务器将创建一个用户,并返回HTTP 201状态码。
组织代码
随着API的增长,代码将变得越来越复杂。因此,需要使用一些技术来组织代码并使其易于维护。
以下是一些有用的技术:
- 路由器模块:将路由集中在一个模块中,使其易于维护。
- 控制器函数:将业务逻辑分离到单独的控制器函数中,使其易于测试和重用。
以下是一个使用这些技术的样例:
// users路由模块
var express = require('express');
var router = express.Router();
var usersController = require('./users.controller');
router.route('/')
.get(usersController.list)
.post(usersController.create);
router.route('/:id')
.get(usersController.read)
.put(usersController.update)
.delete(usersController.delete);
module.exports = router;
// users控制器模块
var users = [
{ id: 1, name: 'Alice', age: 25 },
{ id: 2, name: 'Bob', age: 30 },
];
exports.list = function(req, res) {
res.json(users);
};
exports.create = function(req, res) {
var user = req.body;
user.id = users.length + 1;
users.push(user);
res.sendStatus(201);
};
exports.read = function(req, res) {
var id = parseInt(req.params.id, 10);
var user = findUserById(id);
if (user) {
res.json(user);
} else {
res.status(404).send('User not found');
}
};
exports.update = function(req, res) {
var id = parseInt(req.params.id, 10);
var user = updateUserById(id, req.body);
if (user) {
res.json(user);
} else {
res.status(404).send('User not found');
}
};
exports.delete = function(req, res) {
var id = parseInt(req.params.id, 10);
var success = deleteUserById(id);
if (success) {
res.sendStatus(204);
} else {
res.status(404).send('User not found');
}
};
上面的样例中,我们将users路由集中在一个模块中,并将业务逻辑分离到users控制器模块中。
结论
本文档介绍了如何使用Node.js和Express框架创建RESTful API。我们学习了如何定义路由以及如何处理不同类型的HTTP请求。我们还学习了如何组织代码,以便更容易地维护和测试代码。如果您正在开发Web服务,请考虑使用RESTful API,并且尝试一下Node.js和Express框架。