RESTful API 是目前 Web 开发中使用最广泛的 API 设计风格之一。在使用 RESTful API 进行开发时,HTTP 状态码是非常重要的一部分,它可以帮助我们更好地了解服务器返回的数据,以及处理请求过程中可能出现的错误。本文将详细介绍 RESTful API 中常见的 HTTP 状态码及其含义,并附上相应的示例代码。
1XX:信息性状态码
这一类状态码表示服务器已经接收到请求,但是还需要进一步的处理或者操作。这些状态码通常不会出现在 RESTful API 中,因为它们并不表示请求是否成功。
常见的 1XX 状态码有:
- 100:继续(Continue)
- 101:切换协议(Switching Protocols)
2XX:成功状态码
这一类状态码表示服务器已经成功处理了请求,并返回了相应的数据。这些状态码通常表示请求被正确处理。
常见的 2XX 状态码有:
- 200:成功(OK)
- 201:已创建(Created)
- 204:无内容(No Content)
200:成功(OK)
200 状态码表示服务器成功处理了请求,并返回了相应的数据。这是 RESTful API 最常见的状态码之一。
示例代码:
app.get('/users', function(req, res) { const users = [{ name: 'John' }, { name: 'Jane' }]; res.status(200).json(users); });
201:已创建(Created)
201 状态码表示服务器成功创建了新资源,并返回了相应的数据。这通常在 POST 请求中使用。
示例代码:
app.post('/users', function(req, res) { const user = { name: 'John' }; res.status(201).json(user); });
204:无内容(No Content)
204 状态码表示服务器成功处理了请求,但是没有返回任何数据。这通常在 DELETE 请求中使用。
示例代码:
app.delete('/users/:id', function(req, res) { const userId = req.params.id; // 删除用户 res.status(204).send(); });
3XX:重定向状态码
这一类状态码表示客户端需要进一步的操作才能完成请求。这些状态码通常表示请求被重定向到另一个 URL。
常见的 3XX 状态码有:
- 301:永久移动(Moved Permanently)
- 302:临时移动(Found)
- 303:查看其他位置(See Other)
- 307:临时重定向(Temporary Redirect)
4XX:客户端错误状态码
这一类状态码表示客户端发生了错误,通常是由于客户端发送了无效的请求或者请求的资源不存在。这些状态码通常表示请求未被成功处理。
常见的 4XX 状态码有:
- 400:错误请求(Bad Request)
- 401:未经授权(Unauthorized)
- 403:禁止访问(Forbidden)
- 404:未找到(Not Found)
400:错误请求(Bad Request)
400 状态码表示客户端发送了无效的请求,通常是由于请求参数不正确或者缺失。
示例代码:
// javascriptcn.com 代码示例 app.post('/users', function(req, res) { const name = req.body.name; if (!name) { res.status(400).send('Name is required'); } else { // 创建用户 res.status(201).send(); } });
401:未经授权(Unauthorized)
401 状态码表示客户端未经授权,通常是由于客户端没有提供正确的身份验证信息。
示例代码:
// javascriptcn.com 代码示例 app.get('/users', function(req, res) { const authHeader = req.headers.authorization; if (!authHeader) { res.status(401).send('Authorization header is required'); } else { // 获取用户列表 res.status(200).send(); } });
403:禁止访问(Forbidden)
403 状态码表示客户端被禁止访问请求的资源,通常是由于客户端没有足够的权限。
示例代码:
// javascriptcn.com 代码示例 app.get('/users/:id', function(req, res) { const userId = req.params.id; if (userId !== req.user.id) { res.status(403).send('You are not authorized to access this resource'); } else { // 获取用户信息 res.status(200).send(); } });
404:未找到(Not Found)
404 状态码表示请求的资源不存在。
示例代码:
// javascriptcn.com 代码示例 app.get('/users/:id', function(req, res) { const userId = req.params.id; const user = getUserById(userId); if (!user) { res.status(404).send('User not found'); } else { // 返回用户信息 res.status(200).json(user); } });
5XX:服务器错误状态码
这一类状态码表示服务器发生了错误,通常是由于服务器无法完成请求或者处理请求时发生了错误。这些状态码通常表示请求未被成功处理。
常见的 5XX 状态码有:
- 500:服务器错误(Internal Server Error)
- 502:错误网关(Bad Gateway)
- 503:服务不可用(Service Unavailable)
500:服务器错误(Internal Server Error)
500 状态码表示服务器发生了错误,通常是由于服务器无法完成请求或者处理请求时发生了错误。
示例代码:
app.get('/users', function(req, res) { try { const users = getUsers(); res.status(200).json(users); } catch (err) { res.status(500).send('Server error'); } });
502:错误网关(Bad Gateway)
502 状态码表示服务器作为网关或代理,无法从上游服务器接收到有效的响应。
503:服务不可用(Service Unavailable)
503 状态码表示服务器当前无法处理请求,通常是由于服务器过载或者正在进行维护。
总结
HTTP 状态码是 RESTful API 中非常重要的一部分,它可以帮助我们更好地了解服务器返回的数据,以及处理请求过程中可能出现的错误。在编写 RESTful API 时,我们应该充分利用 HTTP 状态码来传达信息,以便客户端能够更好地处理响应。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658731f3eb4cecbf2dc7f74e