json-server

225 阅读3分钟

json-server:高效构建模拟 RESTful API 的完整指南

json-server 是基于 Node.js 的轻量级工具,可在 30 秒内创建功能完备的 RESTful API,极大提升前端开发和测试效率。以下是优化后的核心功能详解、进阶配置及最佳实践。


一、核心功能与优势

  1. 零代码快速搭建
    只需一个 JSON 文件即可支持完整 CRUD 操作(GET/POST/PUT/PATCH/DELETE)。
    示例数据文件 db.json

    {
      "users": [
        {"id": 1, "name": "张三", "age": 25},
        {"id": 2, "name": "李四", "age": 30}
      ],
      "posts": [
        {"id": 1, "title": "第一篇文章", "author": "张三", "userId": 1}
      ]
    }
    
    • 自动生成路由:/users, /posts, /posts/1
  2. 实时数据监听
    通过 --watch 选项监控文件变更,实时同步 API 数据:

    json-server --watch db.json
    
  3. 高级查询能力

    • 过滤GET /users?age=25
    • 排序GET /users?_sort=name&_order=asc
    • 分页GET /users?_page=2&_limit=5
    • 全文检索GET /users?q=张
    • 范围查询GET /users?age_gte=20&age_lte=30
  4. 关系型数据模拟

    • 嵌套资源GET /posts/1/comments
    • 关联扩展
      GET /users?_embed=posts    # 用户及其文章
      GET /posts/1?_expand=user  # 文章及关联用户
      

二、进阶配置

  1. 自定义路由 (routes.json)

    {
      "/api/*": "/$1",            // 重写路径
      "/blog/posts/:id": "/posts/:id",  // 别名路由
      "/search/:keyword": "/posts?q=:keyword"  // 参数映射
    }
    

    启动命令:

    json-server --routes routes.json db.json
    
  2. 中间件扩展 (middleware.js)

    module.exports = (req, res, next) => {
      // 添加请求时间戳
      if (req.method === 'POST' || req.method === 'PUT') {
        req.body.updatedAt = new Date().toISOString();
      }
      // 模拟延迟(2秒)
      setTimeout(next, 2000);
    };
    

    启动命令:

    json-server --middlewares middleware.js db.json
    
  3. 环境配置文件 (json-server.json)

    {
      "port": 8080,
      "watch": true,
      "static": "./public",  // 托管静态资源
      "delay": 1500,         // 全局响应延迟
      "routes": "routes.json"
    }
    

三、安装与最佳实践

安装步骤

npm install -g json-server  # 全局安装
mkdir mock-api && cd mock-api
touch db.json routes.json  # 初始化文件
json-server --watch db.json --port 3000

调试技巧

  • 使用 Postmancurl 测试端点:
    curl -X POST http://localhost:3000/users -d '{"name":"王五", "age":28}' -H "Content-Type: application/json"
    
  • 启用日志:json-server --watch db.json --logger

四、应用场景扩展

  1. 前端联调

    • 模拟登录认证:中间件添加 JWT 验证逻辑
    • 表单验证:拦截非法 POST 请求并返回错误码 400
  2. 自动化测试

    • Jest 集成:启动服务后运行端到端测试
    • Cypress 模拟:预填充测试数据:
      cy.request('POST', '/users', {name: '测试用户'})
      
  3. 微服务原型
    通过多文件拆分模块:

    json-server --watch user.json --port 3001 &
    json-server --watch product.json --port 3002
    

五、注意事项

  1. 数据持久化

    • 定期备份 db.json(服务重启后内存数据丢失)
    • 使用 lowdb 适配数据库存储
  2. 安全强化

    • 开发环境专用,生产环境需添加:
      • 身份验证中间件
      • CORS 限制
      • 请求速率控制
  3. 性能优化

    • 大数据集启用分页(_page_limit
    • 避免嵌套查询深度超过 3 层

通过灵活配置,json-server 可覆盖 90% 的 API 模拟场景,显著加速前后端分离开发流程。完整文档参考:json-server GitHub