Files
patbond-doc/docs/api/index.md
T
lixi f848476c16
CI / docs-build (push) Successful in 1m12s
docs(api): M3 契约冻结 v1.3.0——community/media 域合入
按第二波定型表(iteration-3 报告 13/15/16/17)将 community/media 域草案
合入正典 openapi.yaml,1.2.0 → 1.3.0:

- 新增 13 路径 / 19 操作(媒体两步上传、帖子生命周期、公共 Feed、
  单层评论、点赞/收藏/关注最小接口),正典总量 31 路径 / 43 操作
- 新增 27 schemas / 4 参数 / 7 响应组件;错误码表补 9 码
  (40301/40403/40404/40405/40406/40905/42203/42204/42205)
- info 头新增「Community / Media 域约定」:Idempotency-Key 必带 +
  规范化 request_hash 比对(与 pets 域差异成文)、私有桶 + 时效性
  预签名 GET 读取语义、防枚举码族、互动面=帖子公开面
- 草案 10 处 TODO-FREEZE 全部回填删除;26 项草案→冻结修正照单全收
  (对照见 iteration-3/18 冻结报告,波末入档)
- index.md 端点清单同步;servers 增 :8084、tags 并入 6 个

api 侧字节级快照同步为硬依赖,由后续 api 侧工单执行。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-09-09 11:12:50 +08:00

3.6 KiB
Raw Blame History

API 契约

正式契约见 openapi.yamlOpenAPI 3v1.3.0),当前 31 路径 / 43 操作:

  • 认证域(第一迭代冻结):注册、登录、刷新、退出、当前用户 5 个端点,统一错误信封 {code, message, data} 与错误码表,以及会话轮换与登录锁定策略说明。

  • 埋点域(M2 第一波补录):POST /api/v1/events 批量上报产品事件——单批 1–50 条、202 逐条结果(accepted/duplicate/rejected)、eventId 幂等去重、唯一允许匿名的写端点(携带 Bearer 则完整校验)。

  • 宠物健康档案域(M2 第二波冻结,12 路径;冻结报告为 iteration-2 的 19 号报告,波末入档):

    • 宠物 CRUDGET/POST /api/v1/petsGET/PATCH /api/v1/pets/{petId}(乐观锁、防枚举 404/40401、MANAGE 仅 owner
    • 只读字典:GET /api/v1/breedsGET /api/v1/vaccine-catalog?species= 过滤)
    • 体重记录:GET/POST /api/v1/pets/{petId}/weightscursor 分页正典 {items, nextCursor, hasMore}
    • 疫苗记录:GET/POST /api/v1/pets/{petId}/vaccinationsPATCH /api/v1/vaccinations/{vaccinationId}(状态机 422/42201、剂次唯一 409/40904
    • 健康事件:GET/POST /api/v1/pets/{petId}/health-eventsPATCH /api/v1/health-events/{eventId}cursor 分页、金额整数分)
    • 照护提醒:GET/POST /api/v1/pets/{petId}/care-remindersPATCH /api/v1/care-reminders/{reminderId}?status= 过滤、流转 422/42202
    • 档案聚合:GET /api/v1/pets/{petId}/summary(最新体重、疫苗进度、下次接种、当月花费;?tz= 缺省 UTC

    权限三档 READ/WRITE/MANAGEADR-015 三角色)、创建返回 201、PATCH 不支持清空回 null、四个记录类 POST 支持可选 Idempotency-Key;错误码新增 40300/40401/40402/40902/40903/40904/42201/42202。

  • 社区与媒体域(M3 第二波冻结,13 路径;冻结报告为 iteration-3 的 18 号报告,波末入档):

    • 媒体两步上传:POST /api/v1/media/uploadsPOST /api/v1/media/uploads/{assetId}/complete(预签名 PUT 直传 + HEAD 校验确认;私有桶,一切读取 URL 为时效性预签名 GET)
    • 帖子生命周期:POST /api/v1/postsGET/PATCH/DELETE /api/v1/posts/{postId}GET /api/v1/me/posts(草稿/编辑/发布/软删;发布 = PATCH {status: published},乐观锁 409/40902,防枚举 404/40403
    • 公共 FeedGET /api/v1/feed(published_at, id) keyset 游标;FeedCard = 200 码点摘要 + 唯一封面行 + 计数)
    • 单层评论:GET/POST /api/v1/posts/{postId}/commentsDELETE /api/v1/comments/{commentId}@ 回复 replyToUserId;仅评论作者可删,帖主不可删他人评论)
    • 点赞/收藏:PUT/DELETE /api/v1/posts/{postId}/like|bookmarkGET /api/v1/me/bookmarksPUT/DELETE 语义幂等,响应回 {liked, likeCount} 族权威终态;收藏列表失效帖静默剔除)
    • 关注最小接口:PUT/DELETE /api/v1/users/{userId}/followGET /api/v1/users/{userId}/follow-stats(自关注 422/42204,自取关 200 幂等 no-op

    创建型写入(发帖/评论)Idempotency-Key 必带1~128,比对规范化 request_hash,与 pets 域可选键刻意不同);互动面 = 帖子公开面(作者本人草稿在互动路径同样 404);错误码新增 40301/40403/40404/40405/40406/40905/42203/42204/42205。

约定:契约变更须先改本文件目录下的 OpenAPI,再改实现(契约先行);错误码只增不改义;pets 域已冻结(1.2.0)、community/media 域已冻结(1.3.0)——冻结后任何字段变更须显著上报、两端同步