解释 RESTful API 中的 HTTP 状态码

RESTful API 是现代 Web 开发中常用的 API 设计风格,它通过 HTTP 定义一组可数的操作,使得 Web 应用程序的开发、测试和维护更加简单和可预测。在 RESTful API 中,HTTP 状态码是非常重要的一个组成部分,它提供了丰富的信息以便客户端处理服务器端的响应。本文将详细解释 RESTful API 中的 HTTP 状态码,并附带示例代码和指导意义。

常见状态码

在 HTTP 协议中,状态码是服务器向客户端返回的响应信息,按照功能可分为 5 类,分别是:

  • 1xx:表示服务器已接收了请求,但需要客户端继续发送数据或操作。例如 100 Continue,表示请求已被服务器确认,客户端可以继续发送请求的其余部分。

  • 2xx:表示服务器成功处理请求。例如 200 OK 表示服务器已成功处理请求。

  • 3xx:表示重定向。例如 301 Moved Permanently 表示请求的资源已经被永久移动到新的位置。

  • 4xx:表示客户端错误。例如 400 Bad Request 表示请求无法被服务器理解或处理。

  • 5xx:表示服务器错误。例如 500 Internal Server Error 表示服务器内部错误。

在 RESTful API 中,最常用的状态码是 200 和 404。其中,200 表示成功返回结果,404 表示请求的资源不存在。此外,还有一些重要的状态码需要了解和掌握。

重要的状态码

201 Created

当服务器成功创建一条新的资源时,应返回状态码 201 Created。例如,客户端向服务器 POST 一张新图片,服务器创建并存储该图片成功,应返回状态码 201 Created,同时附带新创建资源的路径信息。

例如,下面是使用 Node.js 和 Express 框架创建一个返回 201 状态码的 RESTful API 的示例代码。

app.post('/images', function (req, res) {
  // 处理客户端提交的表单数据
  // ...

  // 保存图片到数据库
  var image = new Image({ path: path });
  image.save(function (err) {
    if (err) {
      res.status(500).send('Server error');
    } else {
      res.status(201).location('/images/' + image.id).end();
    }
  });
});

204 No Content

当服务器成功处理请求,但不需要返回任何数据时,应返回状态码 204 No Content。例如,客户端向服务器 DELETE 某一个资源,如果该资源被成功删除,服务器应返回 204 No Content。

例如,下面是使用 Node.js 和 Express 框架创建一个返回 204 状态码的 RESTful API 的示例代码。

app.delete('/images/:id', function (req, res) {
  // 根据 id 删除对应的图片
  Image.deleteOne({ _id: req.params.id }, function (err) {
    if (err) {
      res.status(500).send('Server error');
    } else {
      res.status(204).end();
    }
  });
});

400 Bad Request

当客户端向服务器发送的请求无法被服务器理解或处理时,应返回状态码 400 Bad Request。例如,客户端向服务器 POST 一张不合法的图片,服务器无法解析该图片,应返回 400 Bad Request。

例如,下面是使用 Node.js 和 Express 框架创建一个返回 400 状态码的 RESTful API 的示例代码。

app.post('/images', function (req, res) {
  // 获取客户端提交的表单数据
  var path = req.body.path;

  // 检验表单数据的合法性
  if (!path) {
    res.status(400).send('Bad Request');
  } else {
    // 保存图片到数据库
    var image = new Image({ path: path });
    image.save(function (err) {
      if (err) {
        res.status(500).send('Server error');
      } else {
        res.status(201).location('/images/' + image.id).end();
      }
    });
  }
});

401 Unauthorized

当客户端请求需要认证或权限的资源时,但未提供身份验证信息或身份验证失败时,应返回状态码 401 Unauthorized。例如,客户端向服务器 GET 用户个人信息,但未提供身份验证信息或身份验证失败,应返回 401 Unauthorized。

例如,下面是使用 Node.js 和 Passport.js 库创建一个返回 401 状态码的 RESTful API 的示例代码。

app.get('/user', passport.authenticate('jwt', { session: false }), function (req, res) {
  // 返回客户端请求的用户信息
  res.send(req.user);
});

在上面的示例中,使用了 Passport.js 库来进行用户身份认证,Passport.js 支持各种认证方式,例如基于 OAuth、JWT 和 Local Strategy 的认证方式。

500 Internal Server Error

当服务器内部发生错误时,应返回状态码 500 Internal Server Error。例如,服务器在处理客户端请求时发生了数据库错误,应返回 500 Internal Server Error。

例如,下面是使用 Node.js 和 Express 框架创建一个返回 500 状态码的 RESTful API 的示例代码。

app.get('/images', function (req, res) {
  // 查找所有的图片
  Image.find({}, function (err, images) {
    if (err) {
      res.status(500).send('Server error');
    } else {
      res.send(images);
    }
  });
});

总结

HTTP 状态码是 RESTful API 中非常重要的组成部分,它提供了丰富的信息以便客户端处理服务器端的响应。掌握 HTTP 状态码的正确使用方法和含义,对于开发和维护 RESTful API 是非常有帮助的。本文介绍了常见的 HTTP 状态码,并附带了示例代码和指导意义,希望对读者有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a730bbadd4f0e0ff023793


纠错反馈