日志
日志(Logbook)
目录
Logbook 资源管理你的日志——它们是把台站位置归组在一起的容器。一个日志决定哪些位置作为一个日志显示:仪表盘、日志视图、奖项和统计都跟随当前活动的日志。
- 基础路径:
/api/v2/logbook - 作用域:
logbook:read、logbook:write、logbook:delete - 起始版本: 3.2.0
所有操作都限定在令牌所有者范围内。属于其他用户的日志会被视为未找到。
注意
请先阅读 API v2 概览,了解认证、响应封装与 错误码。
日志与台站位置
两者容易混淆,因此值得明确说明:
- 台站位置是记录 QSO 所针对的对象——呼号、网格、DXCC。QSO 属于它。
- 一个日志完全不拥有任何 QSO。它是一组具名的台站位置,存在的目的是让你能把其中几个(家中、便携、比赛呼号……)作为一个日志来查看——或者把它们分开。
因此,删除日志永远不会影响 QSO;而删除台站位置则会影响。
端点
| 动词 | 路径 | 作用域 | 用途 | 起始版本 |
|---|---|---|---|---|
GET |
/api/v2/logbook |
logbook:read |
列出你的所有日志 | 3.2.0 |
GET |
/api/v2/logbook/{id} |
logbook:read |
获取单个日志 | 3.2.0 |
POST |
/api/v2/logbook |
logbook:write |
创建日志 | 3.2.0 |
PATCH |
/api/v2/logbook/{id} |
logbook:write |
重命名、设为活动、更改关联的位置 | 3.2.0 |
DELETE |
/api/v2/logbook/{id} |
logbook:delete |
删除日志 | 3.2.0 |
列表端点不分页——用户通常只有少数几个日志。
日志对象
{
"id": 3,
"name": "Contest",
"active": true,
"station_ids": [1, 4]
}
| 字段 | 说明 |
|---|---|
id |
日志 ID |
name |
日志名称 |
active |
只读:所有者的当前活动日志为 true |
station_ids |
该日志包含的台站位置 |
active 是只读的,并且有自己专用于写入的对应键 set_active。两者故意使用不同的键,因此 GET 的结果可以直接通过 PATCH 回传,而不会悄悄改变你的活动日志。
列出日志
GET /api/v2/logbook
curl https://<WAVELOG_URL>/index.php/api/v2/logbook \
-H "Authorization: Bearer wl2_your_token_here"
{
"data": [
{ "id": 1, "name": "Home", "active": false, "station_ids": [1] },
{ "id": 3, "name": "Contest", "active": true, "station_ids": [1, 4] }
]
}
单个日志可通过 GET /api/v2/logbook/{id} 获取,返回相同的对象。
创建日志
POST /api/v2/logbook
必填字段: name。station_ids 是可选的——省略它即可创建一个空日志,之后再关联位置。
curl -X POST https://<WAVELOG_URL>/index.php/api/v2/logbook \
-H "Authorization: Bearer wl2_your_token_here" \
-H "Content-Type: application/json" \
-d '{ "name": "Portable", "station_ids": [4] }'
- 你的第一个日志会自动成为活动日志。
- 成功时,API 返回
201 Created、一个Location响应头,并在data中返回创建的对象。 - 使用已存在的名称会返回
409 conflict。 - 若
station_ids中的条目不属你的台站位置,会返回403 forbidden,并在details.station_ids中给出有问题的 id。他人的 id 会被拒绝,绝不会被悄悄丢弃。
更新日志
PATCH /api/v2/logbook/{id}——部分更新。请至少发送三个可写字段中的一个;若请求体不包含其中任何一个,会返回 400 validation_error。
| 字段 | 说明 |
|---|---|
name |
新名称;重复会返回 409 conflict |
station_ids |
替换关联的位置——见下文 |
set_active |
true 会把此日志设为所有者的活动日志 |
curl -X PATCH https://<WAVELOG_URL>/index.php/api/v2/logbook/3 \
-H "Authorization: Bearer wl2_your_token_here" \
-H "Content-Type: application/json" \
-d '{ "name": "Contest 2026", "set_active": true }'
更新后的日志对象会在 data 中返回。
警告:
station_ids会替换整个列表它不是「添加这些位置」的调用:你发送的列表就是最终存储的列表。 发送
[]会解除所有位置的关联,而添加一个位置意味着发送该日志 已有的 id 再加上新的 id。请从GET取得station_ids,修改后再 发回。
所有内容都会在首次写入之前完成校验,因此被拒绝的 PATCH 绝不会让日志处于半更新状态——一个错误的 station_ids 条目不会让你本不打算保留的重命名生效。
删除日志
DELETE /api/v2/logbook/{id}
curl -X DELETE https://<WAVELOG_URL>/index.php/api/v2/logbook/3 \
-H "Authorization: Bearer wl2_your_token_here"
- 活动日志无法删除,会返回
409 conflict。请先通过PATCH上的set_active激活另一个日志。 - 成功时,API 返回
204 No Content。 - QSO 不会受到影响。 它们属于台站位置,而这些位置仍然存在——只是归组关系消失了。
集体台令牌
对于集体台令牌,本资源的每个动词——包括读取——都需要权限级别 9(干事):
| 操作 | 级别 3 / 6 | 级别 9 |
|---|---|---|
GET /api/v2/logbook |
403 |
✅ |
GET /api/v2/logbook/{id} |
403 |
✅ |
POST / PATCH / DELETE |
403 |
✅ |
这与 Web 界面一致:整个日志管理页面仅限干事访问——低于该级别的成员在其中无法管理任何集体台日志,通过 API 同样无法管理。拒绝时返回 403 insufficient_club_permission,并带有 details.required_level。
在低于干事级别的集体台会话中创建令牌时,甚至不会提供 logbook:* 作用域——只能永远返回 403 的令牌不值得签发。
错误
| 状态 | 代码 | 出现场景 |
|---|---|---|
| 400 | validation_error |
缺少 name、station_ids 条目不是数字,或 PATCH 没有可写字段 |
| 403 | forbidden |
station_ids 包含此令牌无法访问的台站位置 |
| 403 | insufficient_scope |
缺少 logbook:read / logbook:write / logbook:delete |
| 403 | insufficient_club_permission |
集体台成员低于干事级别 |
| 404 | not_found |
此令牌所有者没有该日志 |
| 409 | conflict |
日志名称重复,或删除活动日志 |