#broadcast #episode #service #worker #pub-sub #kv #assemblage-db

assemblage_broadcast

AssemblageDB 发布和订阅服务

1 个不稳定版本

0.1.0 2021 年 8 月 18 日

#9 in #episode

AGPL-3.0

19KB
319

AssemblageDB 发布和订阅服务

Assemblage Broadcast 是一个简单的 REST 服务,用于存储作为广播发布的 AssemblageDB 节点。它作为 Cloudflare Worker 实现,并使用 Workers KV 持久化所有广播。广播不需要身份验证,但所有广播在 24 小时后自动过期。

广播格式

广播是从 AssemblageDB 导出并发布的几乎只读的字节流,然后可以在不同的远程 AssemblageDB 中订阅和导入。每个广播通过一个由 Assemblage Broadcast 服务在首次上传广播时随机生成的 UUID 进行标识。原始上传者可以使用授权令牌将更新(称为“剧集”)追加到广播中,而广播的接收者(只知道其公共 UUID,但不知道授权令牌)可以获取广播及其所有剧集,但不能对其进行修改。

路由

POST /broadcast & /broadcast?episode={episode_id}

创建一个新的广播,由一个新的随机生成的 UUID 标识。如果提供了正文(字节)并且设置了可选查询参数 ?episode={episode_id},则将添加一个具有指定剧集 id 和字节正文内容的剧集到广播中。(这可以在单个调用中创建广播并上传其内容,相当于一个没有剧集 id 的 POST 立即后跟一个指定 id 的 PUT 剧集。)

响应 (201 CREATED)

作为响应返回的 "expiration" 值是自 Unix 纪元以来的过期时间,以秒为单位。

{
    "broadcast_id": "<randomly generated UUID, used to GET the broadcast>",
    "token": "<randomly generated UUID, used to POST/PUT the broadcast>",
    "expiration": 123456789
}

PUT /broadcast/{broadcast_id}/{episode_id}

将字节正文作为指定的剧集上传,将其与指定的广播关联。需要 Authorization: Bearer <token>,否则将返回 401 UNAUTHORIZED

响应 (201 已创建200 成功)

""

DELETE /broadcast/{broadcast_id}

通过清除其剧集列表来删除指定的广播。剧集不会被删除,任何人都可以通过剧集ID访问。这确保了广播可以被新剧集覆盖(只要它们有新的剧集ID),但正在下载旧剧集的客户端可以继续这样做,直到剧集自动过期(24小时后)。

响应 (200 成功)

""

GET /broadcast/{broadcast_id}

返回与广播关联的所有剧集列表。

响应 (200 成功)

[
    "<episode_id1>",
    "<episode_id2>"
]

GET /broadcast/{broadcast_id}/{episode_id}

返回指定广播中指定剧集的字节。

响应 (200 成功)

<the bytes of the episode>

依赖

~7–10MB
~179K SLoC