Node.js - RESTful API

你好,有抱负的程序员们!今天,我们将踏上一段激动人心的旅程,探索Node.js和RESTful API的世界。不要担心这些术语现在听起来像是外星语言——在本教程结束时,你将能够流利地使用“REST”!

Node.js - RESTFul API

REST架构是什么?

REST,即表述性状态转移(Representational State Transfer),就像是一套规则,规定了计算机应该如何通过互联网相互交流。想象你在一个餐厅里。你(客户端)向服务员(API)要一份菜单(数据)。服务员不会自己煮食物,而是去厨房(服务器)拿你需要的东西。这种往返过程与REST的工作方式相似!

REST的关键原则:

  1. 客户端-服务器:用户界面和数据存储之间的关注点分离。
  2. 无状态:客户端到服务器的每个请求都必须包含理解该请求所需的所有信息。
  3. 可缓存:响应必须定义自己是否可缓存。
  4. 统一接口:与服务器交互的标准方式。
  5. 分层系统:客户端无法判断它是直接连接到服务器还是连接到中介。

HTTP方法

现在,让我们来谈谈HTTP方法。这些就像动词,告诉服务器执行什么操作。以下是一些主要的:

方法 描述 示例用法
GET 获取数据 获取用户的个人资料
POST 创建新数据 添加一篇新的博客文章
PUT 更新现有数据 编辑用户的详细信息
DELETE 删除数据 删除一条推文
PATCH 部分修改数据 只更新用户的电子邮件

让我们通过一些简单的Node.js代码示例来看看这些方法的应用!

GET请求示例:

const http = require('http');

const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/api/users') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['Alice', 'Bob', 'Charlie'] }));
}
});

server.listen(3000, () => {
console.log('服务器正在3000端口上运行');
});

在这个示例中,我们创建了一个简单的服务器,它响应'/api/users'的GET请求,并返回一个用户列表的JSON。当你运行这段代码并在浏览器中访问'http://localhost:3000/api/users'时,你将看到用户列表

POST请求示例:

const http = require('http');

const server = http.createServer((req, res) => {
if (req.method === 'POST' && req.url === '/api/users') {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
const newUser = JSON.parse(body);
console.log('已添加新用户:', newUser);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: '用户创建成功' }));
});
}
});

server.listen(3000, () => {
console.log('服务器正在3000端口上运行');
});

这个示例演示了如何处理添加新用户的POST请求。它监听传入的数据,处理它们,并发送一个确认用户已创建的响应。

RESTful Web服务

现在我们已经了解了基础知识,让我们深入创建一个完整的RESTful API,使用Express,这是一个流行的Node.js框架,可以轻松构建Web应用程序和API!

首先,让我们安装Express:

npm init -y
npm install express

现在,让我们为图书库创建一个简单的RESTful API:

const express = require('express');
const app = express();
app.use(express.json());

let books = [
{ id: 1, title: '了不起的盖茨比', author: 'F. Scott Fitzgerald' },
{ id: 2, title: '杀死一只知更鸟', author: 'Harper Lee' }
];

// 获取所有书籍
app.get('/api/books', (req, res) => {
res.json(books);
});

// 获取特定书籍
app.get('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('书籍未找到');
res.json(book);
});

// 添加新书籍
app.post('/api/books', (req, res) => {
const book = {
id: books.length + 1,
title: req.body.title,
author: req.body.author
};
books.push(book);
res.status(201).json(book);
});

// 更新书籍
app.put('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('书籍未找到');

book.title = req.body.title;
book.author = req.body.author;
res.json(book);
});

// 删除书籍
app.delete('/api/books/:id', (req, res) => {
const book = books.find(b => b.id === parseInt(req.params.id));
if (!book) return res.status(404).send('书籍未找到');

const index = books.indexOf(book);
books.splice(index, 1);
res.json(book);
});

app.listen(3000, () => console.log('服务器正在3000端口上运行'));

这个示例创建了一个用于管理图书库的完整RESTful API。让我们分解一下:

  1. 我们使用app.get()处理GET请求,获取所有书籍和特定ID的书籍。
  2. app.post()处理新书籍的创建。
  3. app.put()允许我们更新现有书籍。
  4. app.delete()让我们从我们的图书馆中移除书籍。

每条路由都遵循RESTful原则,使用适当的HTTP方法和状态码。

测试您的API

要测试您的API,您可以使用Postman或curl等工具。以下是一个使用curl的示例:

# 获取所有书籍
curl http://localhost:3000/api/books

# 添加新书籍
curl -X POST -H "Content-Type: application/json" -d '{"title":"1984","author":"乔治·奥威尔"}' http://localhost:3000/api/books

# 更新书籍
curl -X PUT -H "Content-Type: application/json" -d '{"title":"更新后的标题","author":"更新后的作者"}' http://localhost:3000/api/books/1

# 删除书籍
curl -X DELETE http://localhost:3000/api/books/1

就是这样!您刚刚使用Node.js和Express创建了自己的第一个RESTful API。记住,熟能生巧。尝试为您的图书库API添加更多功能,比如搜索书籍或按不同标准排序。

构建API就像是在不同的软件应用程序之间构建一座桥梁。您创建的每个API都为您打开了新的可能性,让程序如何交互和共享数据。继续探索,继续编码,最重要的是,在成为Node.js专家的道路上享受乐趣!

Credits: Image by storyset