侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1824 篇文章
  • 累计收到 0 条评论

设计电商系统的商品详情页数据获取流程

2025-12-12 / 0 评论 / 4 阅读

题目

设计电商系统的商品详情页数据获取流程

信息

  • 类型:问答
  • 难度:⭐

考点

RESTful API设计, 前后端数据交互, 基础数据库查询

快速回答

实现商品详情页数据获取的核心步骤:

  1. 设计RESTful API端点:GET /api/products/{id}
  2. 后端从数据库查询商品数据
  3. 返回JSON格式的商品信息
  4. 前端通过AJAX请求获取并渲染数据

关键响应字段:商品ID、名称、价格、描述、库存状态。

解析

1. 原理说明

电商商品详情页需要展示商品的详细信息。核心流程是前端通过API请求商品数据,后端从数据库检索对应ID的商品信息,并以JSON格式返回。

2. 代码示例

数据库表设计(MySQL)

CREATE TABLE products (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  price DECIMAL(10,2) NOT NULL,
  description TEXT,
  stock INT DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

后端API示例(Node.js/Express)

// 商品详情API端点
app.get('/api/products/:id', async (req, res) => {
  try {
    const productId = req.params.id;
    // 数据库查询
    const [rows] = await db.query(
      'SELECT id, name, price, description, stock FROM products WHERE id = ?', 
      [productId]
    );

    if (rows.length === 0) {
      return res.status(404).json({ error: 'Product not found' });
    }

    res.json(rows[0]);
  } catch (err) {
    res.status(500).json({ error: 'Server error' });
  }
});

前端数据获取(JavaScript)

// 获取商品ID=123的数据
fetch('/api/products/123')
  .then(response => response.json())
  .then(product => {
    console.log('商品数据:', product);
    // 渲染到页面
    document.getElementById('product-name').textContent = product.name;
    document.getElementById('product-price').textContent = `¥${product.price}`;
  })
  .catch(error => console.error('请求失败:', error));

3. 最佳实践

  • API设计:遵循RESTful规范,使用名词复数形式,GET方法
  • 数据安全:永远不要返回整个数据库对象(如密码字段)
  • 错误处理:返回标准HTTP状态码(404资源不存在,500服务器错误)
  • 性能优化:只查询必要字段(避免SELECT *)

4. 常见错误

  • ❌ 未验证商品ID导致SQL注入(应使用参数化查询)
  • ❌ 返回敏感字段(如成本价、供应商信息)
  • ❌ 缺少错误处理导致前端页面崩溃
  • ❌ 使用POST获取数据(违反REST规范)

5. 扩展知识

  • 缓存机制:高频访问商品可添加Redis缓存
  • API版本控制/api/v1/products/{id}便于后续迭代
  • 限流:防止恶意请求(如Express-rate-limit中间件)
  • 数据聚合:后续可扩展返回关联数据(如商家信息、评论统计)