Magic-API快速入门
本页面介绍如何快速创建第一个Magic-API接口。
访问管理界面
- 打开浏览器,访问:
http://your-domain.com/magic/web/index.html - 输入账号密码登录
创建第一个接口
步骤1:创建接口组
- 在左侧接口列表右键
- 选择"新建分组"
- 输入分组名称,如:
custom - 设置分组路径,如:
/api/custom
步骤2:创建接口
- 在分组上右键
- 选择"新建接口"
- 输入接口名称,如:
hello - 设置接口路径,如:
/hello - 选择请求方法,如:
GET
步骤3:编写脚本
在编辑区域输入以下代码:
javascript
return {
message: "Hello, Magic-API!",
time: new Date()
}步骤4:保存并测试
- 点击工具栏"保存"按钮
- 点击"运行"按钮执行
- 查看底部调试面板的返回结果
步骤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);