什么是 RESTful API?
RESTful API 是一种设计风格,它基于 HTTP 协议构建,使得客户端和服务端之间的通信变得简单、可扩展和可维护。RESTful API 的核心思想是将资源作为中心,使用 HTTP 方法(GET、POST、PUT、DELETE)对资源进行操作,使得 API 的设计更加符合实际场景。
什么是 JWT 认证?
JWT(JSON Web Token)是一种轻量级的认证方式,它将用户信息封装在一个 JSON 对象中,并使用密钥对其进行签名。在用户登录后,服务端会生成一个 JWT 并返回给客户端,客户端在每次请求时都需要携带 JWT,服务端通过验证 JWT 的有效性来确认用户的身份。
如何使用 RESTful API 和 JWT 认证?
1. 安装依赖
使用 Node.js 和 Express 框架,我们可以轻松地搭建一个 RESTful API 服务,并使用 jsonwebtoken 库实现 JWT 认证。首先需要安装以下依赖:
npm install express jsonwebtoken body-parser --save
2. 创建路由
在 Express 中,我们可以使用 Router 对象来定义路由。假设我们要创建一个用户管理的 API,那么可以创建一个 users.js 文件,并编写如下代码:
const express = require('express'); const jwt = require('jsonwebtoken'); const bodyParser = require('body-parser'); const router = express.Router(); router.use(bodyParser.json()); // 用户信息 const users = [ { id: 1, username: 'admin', password: '123456' }, { id: 2, username: 'guest', password: 'guest' } ]; // 登录接口 router.post('/login', (req, res) => { const { username, password } = req.body; // 验证用户名和密码 const user = users.find(u => u.username === username && u.password === password); if (!user) { return res.status(401).json({ message: '用户名或密码错误' }); } // 生成 JWT const token = jwt.sign({ id: user.id, username: user.username }, 'secret', { expiresIn: '1h' }); // 返回 JWT res.json({ token }); }); // 获取用户信息接口 router.get('/profile', (req, res) => { // 获取 JWT const token = req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).json({ message: '未授权访问' }); } // 验证 JWT try { const decoded = jwt.verify(token, 'secret'); const user = users.find(u => u.id === decoded.id); if (!user) { return res.status(401).json({ message: '用户不存在' }); } // 返回用户信息 res.json({ id: user.id, username: user.username }); } catch (err) { return res.status(401).json({ message: '无效的授权' }); } }); module.exports = router;
在上面的代码中,我们定义了两个接口:登录接口和获取用户信息接口。在登录接口中,我们验证用户名和密码,并生成 JWT 返回给客户端。在获取用户信息接口中,我们需要验证 JWT 的有效性,并返回用户信息。
3. 配置路由
在主文件 app.js 中,我们需要引入 users.js 并将其配置为路由:
const express = require('express'); const usersRouter = require('./routes/users'); const app = express(); app.use('/api/users', usersRouter); app.listen(3000, () => { console.log('Server started on port 3000'); });
4. 测试接口
现在我们可以使用 Postman 或其他工具测试接口了。首先需要使用登录接口获取 JWT,然后在每次请求时携带 JWT。例如,我们可以使用以下命令测试获取用户信息接口:
curl -H "Authorization: Bearer <JWT>" http://localhost:3000/api/users/profile
其中 <JWT>
是登录接口返回的 JWT。
总结
RESTful API 和 JWT 认证是现代 Web 应用的重要组成部分。使用 Node.js 和 Express 框架,我们可以轻松地搭建一个 RESTful API 服务,并使用 jsonwebtoken 库实现 JWT 认证。在编写 API 时,需要注意安全性和可维护性,以确保 API 的正常运行。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65c2ed9badd4f0e0ffce0365