426 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API 规范
## 基础信息
```
Base URL: http://localhost:3000/api
Content-Type: application/json
```
## 端点列表
### 1. 打印
#### 执行打印
```
POST /print/:templateId
```
**请求体:**
```json
{
"data": {
"date": "2025-02-12",
"tasks": [
{"status": "☐", "title": "修复 Bug #123"},
{"status": "☑", "title": "代码审查"}
]
},
"options": {
"copies": 1,
"cutPaper": true
}
}
```
**参数说明:**
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `data` | object | 是 | 模板数据,结构由模板 Schema 定义 |
| `options.copies` | number | 否 | 打印份数,默认 1 |
| `options.cutPaper` | boolean | 否 | 是否切纸,默认 true |
**成功响应 (200)**
```json
{
"success": true,
"jobId": "job_abc123",
"status": "queued",
"estimatedTime": "5s"
}
```
**错误响应 (400/404/500)**
```json
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "数据验证失败",
"details": [
"tasks: 必填字段缺失"
]
}
}
```
**错误码说明:**
| 错误码 | HTTP 状态 | 说明 |
|--------|-----------|------|
| `TEMPLATE_NOT_FOUND` | 404 | 模板不存在 |
| `VALIDATION_ERROR` | 400 | 数据验证失败 |
| `PRINTER_OFFLINE` | 503 | 打印机离线 |
| `TEMPLATE_RENDER_ERROR` | 500 | 模板渲染失败 |
| `PRINT_FAILED` | 500 | 打印失败 |
---
### 2. 模板管理
#### 列出所有模板
```
GET /templates
```
**响应:**
```json
{
"success": true,
"templates": [
{
"id": "daily-todo",
"name": "每日待办",
"description": "打印今日待办事项列表",
"updatedAt": "2025-02-12T07:00:00Z"
}
]
}
```
#### 获取单个模板
```
GET /templates/:id
```
**响应:**
```json
{
"success": true,
"template": {
"id": "daily-todo",
"name": "每日待办",
"config": { /* 完整模板配置 */ }
}
}
```
#### 创建模板
```
POST /templates
```
**请求体:**
```json
{
"id": "food-order",
"name": "餐饮订单",
"description": "打印餐饮订单小票",
"config": {
"name": "餐饮订单",
"width": "80mm",
"blocks": [ /* 块定义 */ ]
}
}
```
**响应:**
```json
{
"success": true,
"template": {
"id": "food-order",
"name": "餐饮订单",
"createdAt": "2025-02-12T07:00:00Z"
}
}
```
#### 更新模板
```
PUT /templates/:id
```
**请求体:**(同创建,可部分更新)
```json
{
"name": "新的名称",
"config": { /* 新配置 */ }
}
```
#### 删除模板
```
DELETE /templates/:id
```
**响应:**
```json
{
"success": true,
"message": "模板已删除"
}
```
---
### 3. 模板 Schema
#### 获取模板数据 Schema
```
GET /templates/:id/schema
```
用于获取模板所需的数据结构和示例。
**响应:**
```json
{
"success": true,
"templateId": "food-order",
"schema": {
"type": "object",
"required": ["orderId", "items"],
"properties": {
"orderType": {
"type": "string",
"description": "订单类型"
},
"orderId": {
"type": "string",
"description": "订单编号"
},
"items": {
"type": "array",
"description": "商品列表",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"quantity": { "type": "number" },
"price": { "type": "number" }
}
}
}
}
},
"example": {
"orderType": "外带",
"orderId": "35205-1",
"items": [
{ "name": "双层吉士堡", "quantity": 1, "price": 22 }
]
}
}
```
---
### 4. 打印任务
#### 查询任务状态
```
GET /jobs/:jobId
```
**响应:**
```json
{
"success": true,
"job": {
"id": "job_abc123",
"templateId": "daily-todo",
"status": "completed",
"createdAt": "2025-02-12T07:00:00Z",
"startedAt": "2025-02-12T07:00:01Z",
"completedAt": "2025-02-12T07:00:05Z"
}
}
```
**状态值:**
- `queued` - 排队中
- `printing` - 打印中
- `completed` - 完成
- `failed` - 失败
- `cancelled` - 已取消
#### 列出最近任务
```
GET /jobs?limit=10&status=completed
```
**查询参数:**
| 参数 | 类型 | 说明 |
|------|------|------|
| `limit` | number | 返回数量,默认 10 |
| `status` | string | 按状态筛选 |
| `templateId` | string | 按模板筛选 |
#### 取消任务
```
DELETE /jobs/:jobId
```
仅可取消 `queued` 状态的任务。
---
### 5. 打印机管理
#### 获取打印机状态
```
GET /printer/status
```
**响应:**
```json
{
"success": true,
"printer": {
"name": "XP-80C",
"ip": "192.168.1.100",
"port": 9100,
"status": "online",
"paperStatus": "ok",
"coverStatus": "closed",
"queueLength": 0
}
}
```
**状态值:**
- `online` - 在线
- `offline` - 离线
- `error` - 错误(查看 `errorCode`
#### 打印测试页
```
POST /printer/test
```
打印一张测试页,用于检查连接和打印质量。
**响应:**
```json
{
"success": true,
"jobId": "job_test_123"
}
```
#### 更新打印机配置
```
POST /printer/config
```
**请求体:**
```json
{
"ip": "192.168.1.100",
"port": 9100,
"width": 80
}
```
---
## 认证(可选)
如需简单保护,在配置文件中启用 API Key
```yaml
security:
enabled: true
apiKey: "your-secret-key"
```
启用后,所有请求需携带 Header
```
X-API-Key: your-secret-key
```
未提供或错误的 Key 返回:
```json
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "无效的 API Key"
}
}
```
---
## WebSocket 实时状态(可选)
如需实时推送打印状态,可连接 WebSocket
```
ws://localhost:3000/ws
```
**事件类型:**
```json
// 任务状态更新
{
"type": "jobUpdate",
"data": {
"jobId": "job_abc123",
"status": "printing"
}
}
// 打印机状态更新
{
"type": "printerUpdate",
"data": {
"status": "online",
"paperStatus": "low"
}
}
```