Skip to content

Magic-API快速入门

本页面介绍如何快速创建第一个Magic-API接口。

访问管理界面

  1. 打开浏览器,访问:http://your-domain.com/magic/web/index.html
  2. 输入账号密码登录

创建第一个接口

步骤1:创建接口组

  1. 在左侧接口列表右键
  2. 选择"新建分组"
  3. 输入分组名称,如:custom
  4. 设置分组路径,如:/api/custom

步骤2:创建接口

  1. 在分组上右键
  2. 选择"新建接口"
  3. 输入接口名称,如:hello
  4. 设置接口路径,如:/hello
  5. 选择请求方法,如:GET

步骤3:编写脚本

在编辑区域输入以下代码:

javascript
return {
    message: "Hello, Magic-API!",
    time: new Date()
}

步骤4:保存并测试

  1. 点击工具栏"保存"按钮
  2. 点击"运行"按钮执行
  3. 查看底部调试面板的返回结果

步骤5:访问接口

bash
curl http://your-domain.com/api/custom/hello

响应:

json
{
    "code": 200,
    "message": "success",
    "data": {
        "message": "Hello, Magic-API!",
        "time": "2024-01-01T12:00:00.000Z"
    }
}

带参数的接口

GET请求参数

javascript
// 获取URL参数
var name = path.name;      // 路径参数 /hello/{name}
var page = param.page;     // Query参数 ?page=1
var limit = param.limit;   // Query参数 ?limit=10

return {
    name: name,
    page: page || 1,
    limit: limit || 10
}

POST请求参数

javascript
// 获取Body参数
var username = body.username;
var password = body.password;

if (!username || !password) {
    return {
        code: 400,
        message: "参数不完整"
    }
}

return {
    code: 200,
    message: "登录成功",
    data: {
        username: username
    }
}

数据库查询示例

查询用户列表

javascript
// 获取分页参数
var page = param.page || 1;
var limit = param.limit || 10;
var offset = (page - 1) * limit;

// 查询数据
var list = db.select("""
    SELECT id, nickname, phone, create_time
    FROM eb_user
    WHERE is_del = 0
    ORDER BY id DESC
    LIMIT ${limit} OFFSET ${offset}
""");

// 查询总数
var total = db.selectInt("SELECT COUNT(*) FROM eb_user WHERE is_del = 0");

return {
    list: list,
    total: total,
    page: page,
    limit: limit
}

查询订单统计

javascript
// 获取参数
var startDate = param.startDate;
var endDate = param.endDate;

var sql = """
    SELECT
        DATE(create_time) as date,
        COUNT(*) as order_count,
        SUM(pay_price) as total_amount
    FROM eb_store_order
    WHERE paid = 1
""";

if (startDate) {
    sql += " AND create_time >= '${startDate}'";
}
if (endDate) {
    sql += " AND create_time <= '${endDate} 23:59:59'";
}

sql += " GROUP BY DATE(create_time) ORDER BY date DESC";

return db.select(sql);

调用HTTP接口

javascript
// GET请求
var result = http.get('https://api.example.com/data');

// POST请求
var result = http.post('https://api.example.com/submit', {
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer your_token'
    },
    body: {
        name: 'test',
        value: 123
    }
});

return result;

使用Redis缓存

javascript
var cacheKey = 'user:stats';

// 先查缓存
var cached = redis.get(cacheKey);
if (cached) {
    return JSON.parse(cached);
}

// 缓存不存在,查询数据库
var stats = db.selectOne("""
    SELECT
        COUNT(*) as total_users,
        SUM(CASE WHEN create_time > DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 ELSE 0 END) as new_users
    FROM eb_user
""");

// 写入缓存,过期时间300秒
redis.setex(cacheKey, 300, JSON.stringify(stats));

return stats;

错误处理

javascript
try {
    var result = db.select("SELECT * FROM non_existent_table");
    return result;
} catch (e) {
    log.error("查询失败: " + e.message);
    return {
        code: 500,
        message: "查询失败",
        error: e.message
    }
}

日志输出

javascript
log.info("这是INFO日志");
log.debug("这是DEBUG日志");
log.warn("这是WARN日志");
log.error("这是ERROR日志");

// 带变量的日志
var userId = 123;
log.info("用户ID: {}", userId);

下一步

成都艾唯特软件有限公司