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