在 Web 开发中,REST(Representational State Transfer)是一种软件架构风格,它在传输层使用 HTTP 协议,通过对资源的操作对应到标准的 HTTP 方法(GET、POST、PUT、DELETE)上,实现了客户端与服务端之间的互动。在实际的开发过程中,使用 RESTful API 可以方便地对各种资源进行 CRUD 操作。
本文将介绍如何使用 Express.js 创建 RESTful API。Express.js 是一款流行的 Node.js Web 开发框架,使用它可以快速搭建起一个 Web 应用程序。
安装与配置
首先,你需要安装 Node.js 和 npm。npm 是 Node.js 的包管理器,在安装 Node.js 时会自动安装。
接下来,你需要通过 npm 安装 Express.js:
npm install express --save
安装完成后,在项目中创建 index.js 文件,并创建一个 Express 应用实例:
const express = require('express') const app = express()
创建 API
在 Express 中,使用 router 对象来处理路由和 URL 映射。你可以为这个对象添加对应的 HTTP 方法,例如 GET、POST、PUT、DELETE,并指定相应的处理函数。
下面是一个简单的例子:
// javascriptcn.com 代码示例 const express = require('express') const app = express() const books = [ { title: 'Harry Potter', author: 'J.K. Rowling' }, { title: 'The Lord of the Rings', author: 'J.R.R. Tolkien' } ] app.get('/api/books', (req, res) => { res.send(books) }) app.get('/api/books/:title', (req, res) => { const title = req.params.title const book = books.find(book => book.title === title) if (book) { res.send(book) } else { res.status(404).send('Book not found') } }) app.post('/api/books', (req, res) => { const book = req.body books.push(book) res.send(book) }) app.put('/api/books/:title', (req, res) => { const title = req.params.title const book = books.find(book => book.title === title) if (book) { book.author = req.body.author res.send(book) } else { res.status(404).send('Book not found') } }) app.delete('/api/books/:title', (req, res) => { const title = req.params.title const bookIndex = books.findIndex(book => book.title === title) if (bookIndex >= 0) { const book = books.splice(bookIndex, 1)[0] res.send(book) } else { res.status(404).send('Book not found') } }) const PORT = 3000 app.listen(PORT, () => { console.log(`Server is listening on port ${PORT}`) })
在这个例子中,我们创建了一个 books 数组用于存储图书信息。然后,我们为 GET、POST、PUT、DELETE 等 HTTP 方法添加相应的处理函数,并使用 router 对象路由到对应的 URL 上。
- GET /api/books:获取所有图书信息
- GET /api/books/:title:获取指定标题的图书信息
- POST /api/books:添加新的图书信息
- PUT /api/books/:title:更新指定标题的图书信息
- DELETE /api/books/:title:删除指定标题的图书信息
测试 API
在完成上述步骤后,你可以使用 Postman 等工具来测试你的 API 是否正常工作。另外,你也可以通过编写测试用例来测试 API 的正确性。
下面是一个简单的测试用例:
// javascriptcn.com 代码示例 const request = require('supertest') const app = require('./index') let book1, book2 describe('Test the API', () => { test('GET /api/books', async () => { const response = await request(app).get('/api/books') expect(response.statusCode).toBe(200) expect(response.body).toHaveLength(2) [book1, book2] = response.body }) test('GET /api/books/:title', async () => { const response = await request(app).get(`/api/books/${book1.title}`) expect(response.statusCode).toBe(200) expect(response.body).toMatchObject(book1) }) test('POST /api/books', async () => { const newBook = { title: 'The Hobbit', author: 'J.R.R. Tolkien' } const response = await request(app).post('/api/books').send(newBook) expect(response.statusCode).toBe(200) expect(response.body).toMatchObject(newBook) }) test('PUT /api/books/:title', async () => { const updatedBook = { title: book1.title, author: 'J.K. Rowling' } const response = await request(app).put(`/api/books/${book1.title}`).send(updatedBook) expect(response.statusCode).toBe(200) expect(response.body).toMatchObject(updatedBook) }) test('DELETE /api/books/:title', async () => { const response = await request(app).delete(`/api/books/${book2.title}`) expect(response.statusCode).toBe(200) expect(response.body).toMatchObject(book2) }) })
在这个测试用例中,我们首先使用 GET 方法获取所有图书信息,并存储前两本书的信息。然后,我们分别测试 GET、POST、PUT、DELETE 方法是否能正常工作,并同时检查是否返回了正确的数据。
总结
在本文中,我们介绍了如何使用 Express.js 创建一个简单的 RESTful API 并进行测试。通过学习本文,你将能够了解如何使用 Express.js 应用框架来创建各种类型的 API,并在应用中实现 CRUD 操作。同时,你还将掌握如何使用 Postman 和 supertest 等工具对 API 进行测试,并编写测试用例验证 API 的正确性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652914c37d4982a6ebba64f6