用途:本资料是构建 AT Protocol(atproto,即 Bluesky 背后的协议)应用的概览与导航,深入细节分散在 references/ 目录中。
核心模型:atproto 是联邦协议,用户拥有签名的、内容寻址的数据仓库,任何服务都可复制。应用多为 App View——消费网络 firehose、按 Lexicon 模式校验记录、建立索引并暴露读 API;写入通过 XRPC 发往用户的 PDS。五个关键概念:DID(永久标识账户,如 did:plc:... 或 did:web:...)、Handle(可变、基于 DNS 的用户名)、Repository(PDS 上签名的内容寻址 Merkle Search Tree)、Lexicon(以 NSID 命名的 JSON 模式,校验记录与 HTTP 端点)、XRPC(Lexicon 端点的 HTTP 传输,firehose 为其 WebSocket 变体)。
服务角色:PDS 托管用户仓库、签名密钥与 blob;Relay 聚合多个 PDS 的 firehose;App View 订阅 relay、校验并索引记录、暴露 XRPC 读接口;Labeler 在 URI 上发布签名标签。自建应用通常是 App View。
使用方式:按任务查阅对应参考文件,如编写 Lexicon 看 references/lexicon.md,身份看 identity.md,XRPC 看 xrpc.md,仓库看 repository.md,firehose 看 firehose.md,OAuth 看 oauth.md,端到端设计 App View 看 app-view.md,Go 包选择看 indigo-go.md。跨主题问题从 app-view.md 入手。
默认技术栈(Markus 的 Go 项目):身份、语法、仓库、Lexicon、XRPC、OAuth 使用 indigo Go SDK(github.com/bluesky-social/indigo);索引存储用 SQLite 或 Postgres,并在同一数据库持久化 firehose 游标;HTML 服务用 gomponents + Datastar。
常见陷阱:Handle 不持久,应始终以 DID 为主标识并单独缓存 Handle;Lexicon 发布后不能收紧或放宽约束,只能加可选字段,破坏性变更需新建 NSID;数据模型不含浮点数,用整数或定点字符串;记录、blob 与 union 变体必须带 $type;TID 时间戳仅供参考,排序用自建 indexedAt;上传 blob 的 EXIF 剥离由客户端负责;解析 Handle 必须双向验证。
限制:资料未提供具体收费、价格、平台支持或效果数据。