Client 设置页需要在用户点击“保存”时立即登记或更新当前 Windows 客户端。现有 claim 会同时领取任务;如果设置页为了登记调用 claim,可能得到 200 + task 并改变任务状态,造成设置保存与任务领取耦合。
claim
200 + task
因此新增一个没有任务副作用的幂等登记接口。保留 claim 的隐式登记作为兼容兜底,不新增定时心跳、租约或状态查询。
PUT /api/v1/client/registration X-Client-Id: <稳定设备号> X-Request-Id: <uuid> Content-Type: application/json Authorization: Bearer <token>
{ "client": { "name": "办公室-01" }, "supported_types": ["collect", "purchase"], "device": { "address": "192.168.0.173:5555", "platform": "android", "pdd_package": "com.xunmeng.pinduoduo" }, "capabilities": { "purchase_mode": "dry_run", "schema_versions": [1] } }
规则:
X-Client-Id
clients.client_id
client.name
supported_types
collect
purchase
device
platform
android
purchase_mode
dry_run
live
schema_versions
新增和更新统一返回 200 OK:
200 OK
{ "registered": true, "client_id": "CLIENT-123456", "registered_at": "2026-08-06T09:00:00Z" }
沿用统一错误结构,至少支持:
400 MISSING_CLIENT_ID
400 INVALID_BODY
422 INVALID_CLIENT_PROFILE
500 CLIENT_REGISTER_FAILED
retryable: true
last_seen_at
updated_at
result
failure
PUT /api/v1/client/registration
docs/task
状态:进行中(契约文档阶段)。本轮先更新双方权威契约和联调手册,不实现 Admin 代码;文档提交后等待 Admin 按本工单实施。
契约文档阶段完成:已更新 Admin/Client 需求、架构、数据模型、接口契约和设备登记联调手册。文档提交 02073ea。接口仍未实现,工单保持打开,等待 Admin 开发路由、Service、Repository、测试及真实 curl 联调。
02073ea
用户已确认 #12 验收通过。
验收复核:
go vet ./...
go test ./...
本地归档:docs/task/12-admin-新增幂等-client-登记接口.md 归档提交:262f48c
docs/task/12-admin-新增幂等-client-登记接口.md
262f48c
非阻塞技术债已写入归档:补长期 Handler 测试、清理 Handler 中过期注释。Epic #1 和 MVP #2 已同步勾选。
No dependencies set.
The note is not visible to the blocked user.
基本信息
背景
Client 设置页需要在用户点击“保存”时立即登记或更新当前 Windows 客户端。现有
claim会同时领取任务;如果设置页为了登记调用claim,可能得到200 + task并改变任务状态,造成设置保存与任务领取耦合。因此新增一个没有任务副作用的幂等登记接口。保留
claim的隐式登记作为兼容兜底,不新增定时心跳、租约或状态查询。接口契约
请求
规则:
X-Client-Id必填,是clients.client_id唯一键;client.name可选,最多 50 字;supported_types必须非空,只允许collect、purchase;device可选;提供时platform当前只接受android;purchase_mode只允许dry_run、live;schema_versions必须包含正整数;成功响应
新增和更新统一返回
200 OK:错误
沿用统一错误结构,至少支持:
400 MISSING_CLIENT_ID;400 INVALID_BODY;422 INVALID_CLIENT_PROFILE;500 CLIENT_REGISTER_FAILED,retryable: true。数据与名称规则
X-Client-Id重复 PUT 执行 upsert,不创建重复 Client;last_seen_at和updated_at;与 claim 的关系
claim继续支持隐式登记,避免旧 Client 无法使用;claim新建 Client 时采用上报名称或 Client ID;claim更新已有 Client 时不覆盖名称,只更新设备、能力和最近活动时间;claim、result、failure继续刷新last_seen_at;做什么
PUT /api/v1/client/registration路由、Handler、Service、Repository 方法;不做什么
验收标准
docs/task归档。状态:进行中(契约文档阶段)。本轮先更新双方权威契约和联调手册,不实现 Admin 代码;文档提交后等待 Admin 按本工单实施。
契约文档阶段完成:已更新 Admin/Client 需求、架构、数据模型、接口契约和设备登记联调手册。文档提交
02073ea。接口仍未实现,工单保持打开,等待 Admin 开发路由、Service、Repository、测试及真实 curl 联调。用户已确认 #12 验收通过。
验收复核:
go vet ./...、go test ./...通过;本地归档:
docs/task/12-admin-新增幂等-client-登记接口.md归档提交:
262f48c非阻塞技术债已写入归档:补长期 Handler 测试、清理 Handler 中过期注释。Epic #1 和 MVP #2 已同步勾选。