ActivityStreams 简介
一、前言:为什么会有 ActivityStreams?
在现代 Web 世界中,“事件流(Activity Stream)”已经成为了许多系统的核心组成部分。
无论是 Facebook 的动态、Slack 的消息、GitHub 的提交记录,还是企业内部的业务事件(如“用户下单”、“任务完成”),都可以抽象为一条“活动(Activity)”。
问题在于:
不同平台的事件格式完全不同。一个“点赞”事件在 Facebook、Twitter、LinkedIn 上的结构都不一样。
这就导致了系统间数据共享、事件订阅、聚合分析的复杂性。
于是,W3C 提出了一个统一的标准 ——ActivityStreams 2.0
二、W3C ActivityStreams 标准简介
ActivityStreams 2.0是由 W3C Social Web Working Group 制定的开放标准,
它定义了一种统一的数据模型和JSON-LD 格式,用于描述社会化活动(social activities)。
W3C 的定义非常清晰:
ActivityStreams provides a JSON-based vocabulary to describe activities in a social system — who did what, to whom, and with what result.
换句话说,ActivityStreams 关注的就是:
- 谁(actor)
- 对什么(object)
- 做了什么(verb/action)
三、核心理念:Activity = Actor + Verb + Object
ActivityStreams 的核心抽象就是一个Activity 对象。
一条 Activity 就是一件“发生的事”。
一个典型的例子如下:
{"@context":"https://www.w3.org/ns/activitystreams","type":"Like","actor":"https://example.org/user/alice","object":"https://example.org/post/1234","published":"2025-10-17T09:00:00Z"}这条记录的语义是:Alice 点赞了帖子 1234。
在这条简单的 JSON 中,你已经能看到 ActivityStreams 的三大核心字段:
| 字段 | 含义 |
|---|---|
| type | 活动类型(Like、Create、Follow、Announce…) |
| actor | 发起者(通常是用户或系统 |
| object | 目标对象(可以是文章、图片、视频、评论等) |
四、ActivityStreams 的数据模型
ActivityStreams 的模型体系非常优雅,它将社交世界抽象为几类核心对象:
Object(对象)
所有可以被操作的东西,都是 Object。
例如:Note(笔记)、Image(图片)、Article(文章)、Video(视频)等。
{"type":"Note","name":"Hello world","content":"My first post!"}Actor(行动者)
发起活动的实体,可以是人、群组、应用或组织。
{"type":"Person","id":"https://example.org/user/bob","name":"Bob"}Activity(活动)
描述 Actor 对 Object 所做的行为,如 Create、Like、Follow、Delete 等。
{"type":"Create","actor":"https://example.org/user/bob","object":{"type":"Note","content":"This is my first post!"}}典型应用场景
| 场景 | 示例 | 描述 |
|---|---|---|
| 社交网络 | Mastodon、Misskey | 用户发布、点赞、关注的事件流 |
| 企业内部事件总线 | 微服务架构 | 统一描述“谁做了什么”业务事件 |
| 数据聚合平台 | Feedly、Zapier | 跨系统聚合不同来源的活动 |
| 审计与日志系统 | 安全或监控日志 | 抽象系统行为为 Activity 对象 |