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框架。