内腔驱动的参数化外壳生成服务,单位 mm。POST 一份
spec + holes,拿回可直接切片的 STL / STEP。
服务端无状态 —— 每个请求自带参数,不依赖界面里正在编辑的东西。
out/api/<job_id>/,1 小时后自动删,也可 DELETE 立即清。https://lei.la/3d;--host 0.0.0.0 时强制要求 API Key,没设直接拒绝启动。--cors 才开);路径限定挡 ../;并发上限 8。| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/v1/health | 健康检查(免鉴权) |
| GET | /api/v1/capabilities | 参数能力:字段、范围、枚举、坐标约定(免鉴权) |
| GET | /api/v1/openapi.json | OpenAPI 3.1,可导入 Postman / 生成 SDK |
| GET | /api/v1/example | 可直接 POST 的完整示例请求体 |
| POST | /api/v1/build | 校验 + 建模,只回包围盒 / 体积 / 干涉,不落盘 |
| POST | /api/v1/export | 建模 + 落盘,回可下载的文件列表 |
| GET | /api/v1/jobs | 任务列表 |
| GET | /api/v1/jobs/{id} | 任务详情(文件清单 + 指标,不含参数) |
| GET | /api/v1/jobs/{id}/{file} | 下载模型文件 |
| DELETE | /api/v1/jobs/{id} | 立即删除任务及其文件 |
| GET | /api/v1/presets | 预设列表(只读) |
| GET | /api/v1/presets/{name} | 下载预设 JSON(只读,无上传接口) |
下例里的 $BASE 就是当前服务地址 https://lei.la/3d,
先 set BASE=https://lei.la/3d(PowerShell: $env:BASE="https://lei.la/3d")。
curl -s $BASE/api/v1/example -o payload.json
curl -s -X POST $BASE/api/v1/build \ -H 'Content-Type: application/json' \ -H 'X-API-Key: <你的 key>' \ -d @payload.json
curl -s -X POST $BASE/api/v1/export \ -H 'Content-Type: application/json' \ -d '{"spec":{"cav_l":37.2,"cav_w":25.3,"cav_h":18.8}, "holes":[],"name":"mycase","formats":["stl"]}'
curl -OJ $BASE/api/v1/jobs/<job_id>/mycase_base.stl
cav_l/cav_w/cav_h 也行,其余取默认值,未知字段忽略。shell。["stl"] / ["step"] / 两者,默认 ["stl"]。base 底座 / lid 上盖 / assembly 整装,默认全给。{
"ok": true,
"job_id": "j20261021165938_2f89e8",
"files": [
{ "part":"base", "fmt":"stl", "name":"demo_base.stl",
"size":116184, "sha256":"…",
"url":"https://lei.la/3d/api/v1/jobs/<id>/demo_base.stl" }
],
"metrics": { "bbox":[57.6,30.1,21.6], … },
"warnings": ["…"],
"expires_in": 3600
}
{
"ok": false,
"error": {
"code": "VALIDATION_FAILED",
"message": "参数校验未通过",
"details": ["卡扣过盈 0.30 会把底座壁(0.10)挖穿"]
}
}
400 | BAD_JSON / BAD_REQUEST / TOO_MANY_HOLES |
401 | UNAUTHORIZED 缺或错 API Key |
404 | NOT_FOUND 端点 / 任务 / 文件不存在 |
413 | BODY_TOO_LARGE 请求体超限 |
422 | VALIDATION_FAILED 参数不合法(details 里是逐条原因) |
-Y +Y -X +X TOP BOTTOMrect 矩形 / round 圆孔(用 w 当直径)/ slot 腰形槽 / hex 六边形 / tri 三角孔center 之外还有 left、right。基准面是真正被切的外表面,所以 left + u:0 就是齐外沿。bottom 就是距底面(侧面就是 Z)。n:2, pitch:10 就是左右各一个。0 表示切穿。
(u, v) 永远按模型正方向走,不随面的朝向翻转。孔上端如果伸进裙边区
(split_z − skirt_h 以上),上盖裙边会同步开口 —— 这是正常的,
warnings 里会提一句。
# 仓库里带了一个只用标准库的完整示例 python examples/api_client.py python examples/api_client.py --base https://lei.la/3d --key <你的 key>
CORS 默认关闭 —— 同源的网页界面不需要它,而开放它等于让任意网站都能调本机服务。
确实要从别的域名下的页面调用时,启动加 --cors,此时才返回
Access-Control-Allow-Origin: * 并处理 OPTIONS 预检。
线上 https://lei.la/3d 已开启 API Key。建模和导出请求要带
X-API-Key: <key>(或 Authorization: Bearer <key>);
health / capabilities / openapi.json 始终免鉴权,方便探活。
网页界面走的是同源内部接口,不需要 key。
# 自建部署时也可以自己指定 key(对外监听强制要求) python app/server.py --port 8771 --api-key my-secret # 或者 set SHELLGEN_API_KEY=my-secret && python app/server.py --port 8771