活动Pub

W3C公司建议

此版本:
https://www.w3.org/TR/2018/REC-activitypub-20180123/
最新发布版本:
https://www.w3.org/TR/activitypub/
最新编辑草稿:
https://w3c.github.io/activitypub网站/
测试套件:
https://test.activitypub.rocks网站/
实施报告:
https://activitypub.rocks/implementation-report
以前的版本:
https://www.w3.org/TR/2017/PR-activitypub-20171205/
编辑:
克里斯汀·莱默·韦伯
杰西卡·塔隆
作者:
克里斯汀·莱默·韦伯
杰西卡·塔隆
艾琳·谢泼德
艾米·盖伊
德诺夫
存储库:
Git存储库
问题
提交

请检查勘误表是否有任何错误或问题自发布以来报告。

另请参阅 翻译.


摘要

ActivityPub协议是一种分散的社交网络协议基于[ActivityStreams活动流]2.0数据格式。它提供了用于创建、更新和删除的客户端到服务器API内容,以及用于交付的联邦服务器到服务器API通知和内容。

本文件的状态

本节描述了本文档发布时的状态。其他文件可能取代本文件。当前列表W3C公司出版物和本技术报告的最新修订版可在W3C公司技术报告索引https://www.w3.org/TR/。

本文件由社交网络工作组作为建议。

邀请所有相关方提供实现和缺陷通过工作组的报告和其他评论问题跟踪程序.这些将由社交网络社区组并在本规范的任何未来版本中考虑。

请参阅工作组的实施报告.

本文件已由W3C公司成员,由软件开发人员和其他W3C公司并由董事批准为W3C公司建议。这是一份稳定的文件,可以用作参考材料或从其他文件中引用文档。W3C公司在提出建议时,的作用是提请人们注意规范并促进其广泛部署。这增强了功能以及Web的互操作性。

本文件由一群人W3C公司专利政策.W3C公司保持一个任何专利的公开清单披露与以下可交付成果相关群体;该页面还包括披露专利的说明。对专利具有实际知识的个人个人认为包含基本索赔必须按照部分第6页W3C公司专利政策.

本文件受2017年3月1日W3C公司工艺文件.

1概述

ActivityPub提供两层:

ActivityPub实现可以只实现其中一个,或者他们俩都是。然而,一旦实现了一个,就不需要太多步骤实现另一个,两者都有很多好处你的网站是去中心化社交网络的一部分,并且能够使用跨多种类型工作的客户端和客户端库社交网站)。

在ActivityPub中,用户由“演员"通过服务器上的用户帐户。不同服务器上的用户帐户对应于不同的参与者。每个演员都有:

演员与收件箱和发件箱

这些是端点,或者实际上只是URL,它们列在ActivityPub演员的ActivityStreams描述。(稍后将详细介绍ActivityStreams)。

下面是我们的朋友Alyssa P.Hacker的记录示例:

示例1
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“个人”,“id”:"https://social.example/alyssa/",“名称”:“Alyssa P.黑客”,“首选用户名”:“alyssa”,“摘要”:“麻省理工学院的Lisp爱好者欢呼”,“收件箱”:"https://social.example/alysis收件箱/",“发件箱”:"https://social.example/alyssa/outbox/",“关注者”:"https://social.example/alyssa/followers/",“关注”:"https://social.example/alysa/关注/",“喜欢”:"https://social.example/alyssa/点赞/"}

ActivityPub使用[ActivityStreams活动流]因为它的词汇。这非常棒,因为ActivityStreams包括所有常见的表示所有活动和内容流动所需的术语围绕社交网络。ActivityStreams可能已经包含了所有词汇表您需要,但即使不需要,ActivityStreams也可以扩展通过[JSON-LD格式].如果你知道什么是JSON-LD,你可以利用酷链接JSON-LD提供的数据方法。如果没有,不用担心,JSON-LD文档和ActivityStreams可以理解为普通的旧的简单JSON。(如果要添加扩展,那么JSON-LD真的能帮到你)。

所以,好吧。艾丽莎想和她的朋友聊天,她的朋友想和她聊天她!幸运的是,这些“收件箱”和“发件箱”可以帮助我们解决问题。对于GET和POST,它们的行为都不同。让我们看看它是如何工作的:

演员,消息从世界其他地方流向收件箱,从发件箱流向世界其他地方

嘿,很好,所以简单回顾一下:

当然,如果最后一个(从某人的发件箱中取出)是查看人们发送内容的唯一方法是高效的联邦协议!事实上,联合通常是通过服务器发布由其他服务器收件箱上的actor到actor。

让我们看一个例子!比方说,阿丽莎想赶上她的朋友本·比蒂德尔。她最近借给他一本书,她想确保他还书给她。以下是她作为ActivityStreams对象编写的消息:

示例2
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“备注”,“至”: ["https://chatty.example/ben网站/"],“归属于”:"https://social.example/alyssa/",“内容”:“喂,我借给你的那本书你看完了吗?”}

这是一张写给本的便条。她把它寄给了她的发件箱。

演员将消息发布到发件箱

由于这是一个非活动对象,服务器会识别出这是一个新创建的对象,并礼貌地将其包装a创建活动。(ActivityPub中发送的活动通常遵循以下模式某个演员对某个对象进行的某些活动。在这种情况下,活动是一个Create of a Note对象,由人员)。

示例3
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“创建”,“id”:"https://social.example/alysisa/posts/a29a6843-9feb-4c74-a7f7-081b9c9201d3",“至”: ["https://chatty.example/ben网站/"],“演员”:"https://social.example/alyssa/",“对象”: {“类型”:“备注”,“id”:"https://social.example/alyssa/posts/49e2d03d-b53a-4c4c4-a95c-94a6abf45a19社交网站",“归属于”:"https://social.example/alyssa/",“至”: ["https://chatty.example/ben网站/"],“内容”:“喂,我借给你的那本书你看完了吗?”}}

Alyssa的服务器查找Ben的ActivityStreams演员对象,找到他的收件箱端点,并将她的对象POST到他的收件箱。

服务器发布到远程参与者的收件箱

从技术上讲,这是两个单独的步骤。。。一种是客户端到服务器通信,一个是服务器到服务器的通信(联邦)。但是,由于我们在本例中同时使用了它们,因此可以抽象地将此视为从发件箱到收件箱的简化提交:

从一个演员的发件箱流向另一个演员收件箱的便笺

酷!过了一会儿,艾丽莎检查她收到了什么新消息。她的手机通过GET和一系列猫咪视频查询她的收件箱她的朋友发来的照片和她姐姐发来的侄子的照片,她如下所示:

示例4
{“@context”:“https://www.w3.org/ns/activitystreams网站",“type”:“创建”,“id”:“https://chatty.example/ben/p/51086",“至”:[“https://social.example/alyssa/"],“演员”:“https://chatty.example/ben网站/",“object”:{“type”:“备注”,“id”:“https://chatty.example/ben/p/51085",“attributedTo”:“https://chatty.example/ben网站/",“至”:[“https://social.example/alyssa/"],“回复至”:“https://social.example/alyssa/posts/49e2d03d-b53a-4c4c4-a95c-94a6abf45a19社交网站",“content”:“啊,是的,对不起,我明天会还给你的</p><p>我正在复习关于登记机的部分,因为我已经有一段时间没有写了</p> “}}”

阿丽莎松了一口气,喜欢本的帖子:

示例5
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“喜欢”,“id”:"https://social.example/alyssa/posts/5312e10e-5110-42e5-a09b-934882b3ecec(英语)",“至”: ["https://chatty.example/ben网站/"],“演员”:"https://social.example/alyssa/",“对象”:"https://chatty.example/ben/p/51086"}

她把这条信息发布到她的发件箱。(因为这是一个活动,她的服务器知道它不需要包装a创建对象)。

她对事情感到高兴,决定向她发布一条公开信息关注者。很快,以下消息就被发送给了她的所有成员followers集合,因为它有特殊的Public组地址,通常任何人都可以阅读。

示例6
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“创建”,“id”:"https://social.example/alysisa/posts/9282e9cc-14d0-42b3-a758-d6aeca6c876b",“至”: ["https://social.example/alyssa/followers/","https://www.w3.org/ns/activitystreams#公开"],“演员”:"https://social.example/alyssa/",“对象”: {“类型”:“备注”,“id”:"https://social.example/alyssa/posts/d18c55d4-8a63-4181-9745-4e6cf7938fa1社交网站",“归属于”:"https://social.example/alyssa/",“至”: ["https://social.example/alyssa/followers/","https://www.w3.org/ns/activitystreams#公开"],“内容”:“把书借给朋友很好。把书拿回来更好!:)”}}

1.1社交网络工作组

活动Pub是几个相关的社交网络工作组正在制定的规范。对替代方法和补充方法感兴趣的实施者应审查协议[微型酒吧]和概述文档[社会网络协议].

2合规性

以及标记为非规范的章节、所有创作指南、图表、示例、,本规范中的注释是非规范性的。本规范中的其他内容是规范。

关键词5月,必须,不能,应该、和不应该解释如下[RFC2119协议].

2.1规格配置文件

本规范定义了两个密切相关和相互作用的协议:

客户端到服务器协议,或“社交API”
此协议允许客户端执行操作代表用户的。例如,移动电话应用程序使用此协议来与用户演员的社交流交互。
服务器到服务器协议,或“联合协议”
此协议用于在上的参与者之间分发活动不同的服务器,将它们绑定到同一个社交图中。

ActivityPub规范的设计是为了这些协议已经实现,支持另一个协议非常重要几乎没有额外的努力。然而,服务器仍然可以实现一个而不实现另一个。这给出了三个一致性类:

符合ActivityPub的客户端
此指定适用于所有客户端到服务器协议的客户端部分。
符合ActivityPub的服务器
此指定适用于所有客户端到服务器协议的服务器部分。
符合ActivityPub的联合服务器
此指定适用于联邦协议。

当规范的某一部分仅适用时,将对其进行调用实现联邦协议。此外,无论何时规定要求,都会要求它们适用于客户端还是服务器(对于客户端到服务器协议)或是否引用中的发送或接收服务器服务器到服务器协议。

三。物体

对象是围绕这两个概念的核心概念[ActivityStreams活动流]和ActivityPub已构建。对象通常包装在Activities中,并包含在集合,它们本身是Objects的子类。请参阅[活动-词汇]文档,尤其是核心类;ActivityPub非常密切地遵循这个词汇表的映射。

ActivityPub定义了除ActivityStreams。这些条款在ActivityPub中提供JSON-LD上下文https://www.w3.org/ns/activitystreams网站.实施者应该将ActivityPub上下文包含在对象定义。实施者5月酌情包括其他上下文。

ActivityPub也有相同的功能ActivityStreams中的URI/IRI约定.

服务器应该验证他们收到的内容以避免内容欺骗攻击。(服务器应该做一些至少与检查对象在其原点处显示为接收状态,但机制例如,如果可用,检查签名会更好)。没有权威指定特定的验证机制这个文档,但请参阅安全注意事项以获取一些建议和良好实践。

例如,如果example.com收到活动
例7
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“喜欢”,“演员”:"https://example.net网站/~马洛里“,“至”: ["https://hatchat.example/sarah网址/","https://example.com/peeps/john网址/"],“对象”: {“@context”: {“@语言”:“恩”},“id”:"https://example.org/~alice/note/23“,“类型”:“备注”,“归属于”:"https://example.org/~爱丽丝“,“内容”:“我是山羊”}}
它应该取消引用身份证件以确保其存在并且是一个有效的对象,并且它没有歪曲该对象。(在这个例子中,Mallory可能是在欺骗据称发布的对象作者:Alice)。

3.1对象标识符

中的所有对象[ActivityStreams活动流]应该具有唯一的全局标识符。ActivityPub扩展了这一要求;ActivityPub协议必须具有唯一的全局标识符,除非故意是暂时的(短期活动旨在能够被查找,例如某些类型的聊天消息或游戏通知)。这些标识符必须属于以下组之一:

  1. 公共可取消引用的URI,如HTTPS URI,及其属于其原始服务器的权限。(面向公众的内容应该使用HTTPS URI)。
  2. 明确指定为JSON的ID无效的对象,这意味着一个匿名对象(它的父上下文的一部分)

标识符必须为发布在服务器中的活动提供服务器通信,除非活动是有意暂时的。但是,对于客户端到服务器的通信,服务器接收对象发布到发件箱,但未指定身份证件 应该在参与者的命名空间中分配对象ID并将其附加到发布的对象。

所有对象都具有以下属性:

身份证件
对象的唯一全局标识符(除非对象是暂时的,在这种情况下身份证件 5月省略)。
类型
对象的类型。

3.2检索对象

可以根据对象的身份证件属性检索活动。服务器5月使用中定义的HTTP内容协商[RFC7231协议]至选择响应请求返回的数据类型,但是必须显示ActivityStreams对象表示作为对…的回应application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站",应该还显示了中的ActivityStreams表示对…的响应应用程序/活动+json也。客户必须指定一个接受带有application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站"媒体类型以检索活动。

服务器5月为不符合要求的请求实现其他行为符合上述要求。(例如,服务器可能实施其他遗留协议,或可以对HTML和ActivityStreams使用相同的URI表示资源)。

服务器5月需要中规定的授权B.1节 身份验证和授权,并可以另外实现其自己的授权规则。服务器应该未通过授权的请求失败使用适当的HTTP错误代码或403 Forbidden进行检查错误代码,其中对象的存在被认为是私有的。不希望披露存在私人目标5月而是使用状态代码进行响应404未找到。

3.3源属性

除了由[活动-词汇],ActivityPub扩展了对象通过提供来源属性。这个来源属性旨在传递一些一种来源内容标记作为起源的一种形式,或为了支持未来由客户编辑。通常,客户机从来源内容而不是相反。

的价值来源本身就是一个对象它使用自己的内容媒体类型提供源信息的字段。

例8
{“@context”: ["https://www.w3.org/ns/activitystreams网站",{“@语言”:“恩”}],“类型”:“备注”,“id”:"http://postparty.example/p/2415",“内容”:“我非常喜欢草莓!”,“源”: {“内容”:“我真的很喜欢草莓!”,“媒体类型”:“文本/标记”}}
注释:当客户端无法有效处理mediaType时该怎么办?

一般来说,最好让用户编辑他们的原始帖子他们最初以相同的源格式编写它。但并非所有客户端都能可靠地为所有源类型,并且由于客户端需要执行转换自来源内容,一些客户端可能使用另一个客户端使用的媒体类型不知道如何使用。虽然客户可以切实提供内容要编辑的标记并忽略源,这意味着用户将失去更理想的原始格式来源在将来的任何修订中。因此,这样做的客户应该提供一个最低限度的干扰性警告注意,原始源格式无法理解因此被忽视。

例如,Alyssa P.Hacker喜欢在她的ActivityPub上发帖通过她编写的Emacs客户端支持博客,利用组织模式.后来,她切换到手机客户端上进行编辑不知道是什么文本/x-org是或如何渲染它转换为HTML,因此它提供了一个文本框来编辑原始内容而不是。编辑区域上方会显示一条有用的警告:,“这最初是用另一种标记语言编写的,我们没有知道如何处理。如果你编辑,你会丢失你的原件来源!"艾莉莎觉得这个小小的拼写错误不值得失去她的美貌org-mode标记并决定在收到家。

4演员

ActivityPub演员通常是ActivityStreams参与者类型,但它们不一定是。例如简况对象可以用作参与者,也可以用作ActivityStreams扩展中的类型。演员是恢复像其他人一样ActivityPub中的对象。与其他ActivityStreams对象一样,参与者有一个身份证件,它是一个URI。直接输入用户界面时(例如登录时形式),则希望支持简化的命名。为此,ID规范化应该执行如下:

  1. 如果输入的ID是有效的URI,则直接使用它。
  2. 如果用户似乎忽略了为URI添加一个方案否则将被视为有效,例如example.org/alice/,个客户端5月试图提供默认方案,最好https(https).
  3. 否则,输入的值应视为无效。

一旦确定了参与者的URI,就应该取消对它的引用。

注释
ActivityPub没有规定“用户”和参与者;有许多配置是可能的。可能有多个用户或组织控制参与者,或者类似地,一个人或组织可以控制多个演员。类似地,Actor可能代表一个软件,比如机器人或者自动化流程。更详细的“用户”建模,例如将参与者链接在一起由同一实体控制,或允许呈现一个参与者通过多个备选配置文件或方面,由您自行决定执行情况。

4.1演员物体

参与者对象必须除了3.1 对象标识符,以下属性:

收件箱
对[ActivityStreams活动流] 有序集合由参与者收到的所有消息组成;看见5.2 收件箱.
发件箱
安[ActivityStreams活动流] 有序集合由演员产生的所有信息组成;看见5.1 发件箱.

启动位置应该此外,提供以下内容属性:

下列的
指向[ActivityStreams活动流]演员集合这个演员正在跟随;看见5.4 以下集合
追随者
指向[ActivityStreams活动流]演员集合跟随这个演员;看见5.3 粉丝集合.

启动位置5月提供以下属性:

喜欢
指向[ActivityStreams活动流]对象集合此演员喜欢;看见5.5 喜欢的收藏.
示例9
{“@context”: ["https://www.w3.org/ns/activitystreams网站",{“@语言”:“ja”}],“类型”:“个人”,“id”:"https://kenzoishii.example.com/",“关注”:"https://kenzoishii.example.com/following.json",“关注者”:"https://kenzoishii.example.com/followers.json",“喜欢”:"https://kenzoishii.example.com/liked.json",“收件箱”:"https://kenzoishii.example.com/inbox.json",“发件箱”:"https://kenzoishii.example.com/feed.json网站",“首选用户名”:“肯佐西”,“名称”:"石井健蔵",“摘要”:"この方はただの例です",“图标”: ["https://kenzoishii.example.com/image/165987aklre4"]}

启动位置5月此外,还提供以下属性:

溪流
可能感兴趣的补充托收清单。
首选用户名
一个简短的用户名,可以用来指代演员,没有唯一性保证。
端点
映射其他(通常是服务器/域范围)的json对象可能对该参与者或某人有用的端点引用此演员。此映射可以作为值嵌套在actor文档中或者可以是指向具有这些属性的JSON-LD文档的链接。

这个端点映射5月包括以下内容属性:

代理URL
端点URI,以便此参与者的客户端可以访问远程需要身份验证才能访问的ActivityStreams对象。要使用此端点,客户端将x-www-form-urlencoded 身份证件参数值为身份证件请求的ActivityStreams对象。
oauthAuthorization端点
如果OAuth 2.0无记名令牌[RFC6749协议] [RFC6750型]正在使用用于身份验证客户端到服务器相互作用,此端点指定浏览器身份验证用户所在的URI可以获得新的授权授予。
oauthToken端点
如果OAuth 2.0无记名令牌[RFC6749协议] [RFC6750型]正在使用用于身份验证客户端到服务器相互作用,此端点指定客户端可以在其中获取访问令牌。
提供客户端密钥
如果链接数据签名和HTTP签名用于身份验证和授权,此端点在哪些浏览器身份验证用户可以授权客户端的公共的键客户端到服务器相互作用.
signClientKey(签名客户端密钥)
如果链接数据签名和HTTP签名用于身份验证和授权,此端点在其中客户端密钥可以由参与者的密钥签名一段时间代表演员与外国人互动的窗口服务器。
共享收件箱
可选端点用于广泛交付公开发表的活动以及发送给关注者的活动.共享收件箱端点应该也要公开可读的有序集合对象包含对象的地址公共特别收藏。共享收件箱端点不能目前未发送到公共端点。
注释

作为ActivityPub的上游词汇,任何适用的[ActivityStreams活动流]属性可以用于ActivityPub参与者。一些ActivityStreams属性特别值得强调演示如何在ActivityPub实现中使用它们。

网址
如果不等于的值身份证件.
名称
演员的首选“昵称”或“显示名称”。
总结
用户关于自己的快速摘要或个人简介。
偶像
指向表示用户的个人资料图片(这可能是缩略图)。
注释

包含自然语言值的属性,例如名称,首选用户名,或总结,利用ActivityStreams中定义的自然语言支持.

5收藏

[ActivityStreams活动流]定义集合概念;活动Pub定义了几个具有特殊行为的集合。请注意,ActivityPub使用ActivityStreams分页遍历大型对象集。

请注意,其中一些集合被指定为类型 有序集合具体来说,当其他人被允许成为 收藏或一个 有序集合. 有序集合 必须以相反的时间顺序一致地呈现。

注释

使用什么属性来确定逆时间顺序有意留作实现细节。例如,许多SQL样式的数据库使用递增整数作为一个标识符,可以合理地用于处理大多数情况下的插入顺序。在其他数据库中,插入时间时间戳可能是首选。使用什么并不重要,但元素的顺序必须保持原样,先换新的。定期更改的属性,如“上次更新”时间戳,不应使用。

5.1发件箱

发件箱是通过发件箱的属性演员的轮廓。这个发件箱 必须成为 有序集合.

发件箱流包含用户的活动发布,取决于请求者检索活动(即发件箱的内容由阅读者的权限)。如果用户提交请求时没有授权服务器应该用所有的公共帖子。这可能是由用户,尽管可用项目的数量留给实现和部署服务器的人员的自由裁量权。

发件箱接受HTTP POST请求,其行为如客户端到服务器互动.

5.2收件箱

通过收件箱的属性演员的轮廓。这个收件箱 必须成为 有序集合.

收件箱流包含演员。服务器应该根据请求者的筛选内容许可。通常,收件箱的所有者可能能够访问所有收件箱内容。根据访问控制,一些其他内容可能是公开的,而其他内容可能需要非所有者用户的身份验证(如果他们可以访问收件箱)完全。

服务器必须对返回的活动执行重复数据消除收件箱。如果活动同时满足这两个条件,则可能发生重复对演员的追随者,以及特定的同时跟随接收方参与者的参与者,而服务器出现故障以消除收件人列表的重复。此类重复数据消除必须通过比较身份证件删除所有活动已经看过了。

联邦服务器上参与者的收件箱接受HTTP POST请求,行为描述见送货.非联邦服务器应该返回405方法不允许收到POST请求。

5.3粉丝集合

演员 应该有一个追随者收藏。这是发送了跟随演员的活动,添加为副作用.在这里可以找到所有演员的名单跟随演员。这个追随者收集必须要么是 有序集合或a 收藏5月根据经过身份验证的用户的权限进行筛选或在未提供身份验证时视情况而定。

注释:通知目标的默认设置

以下活动通常是请求查看参与者的对象创建。这使Followers集合成为适当的默认值的目标传送个通知(共个)。

5.4以下集合

每个演员应该有一个下列的收藏。这是演员关注的所有人的列表,添加为副作用.这个下列的收集必须要么是 有序集合或a 收藏5月根据经过身份验证的用户的权限进行筛选或在未提供身份验证时视情况而定。

5.5喜欢的收藏

每个演员5月有一个喜欢收藏。这是所有参与者的每个对象的列表喜欢活动,添加为副作用.这个喜欢收集必须要么是 有序集合或a 收藏5月根据经过身份验证的用户的权限进行筛选或在未提供身份验证时视情况而定。

5.6公共寻址

除此之外[ActivityStreams活动流]集合和对象,活动还可以针对特殊的“公众”集合,带有标识符https://www.w3.org/ns/activitystreams#公开.例如:

示例10
{“@context”:"https://www.w3.org/ns/activitystreams网站",“id”:"https://www.w3.org/ns/activitystreams#公开",“类型”:“集合”}

所有人都可以访问针对该特殊URI的活动用户,无需身份验证。启动位置不能向“公众”提供特别收藏;它不能接收实际的活动。然而,演员5月有一个共享收件箱可用于高效共享公共交付的端点帖子(以及仅针对追随者的帖子);看见7.1.3 共享收件箱传递.

注释

使用ActivityStreams压缩ActivityStreams对象JSON-LD上下文可能会导致https://www.w3.org/ns/activitystreams#公开被简单地表示公共作为:公共这些是公共集合的有效表示。将ActivityStreams对象视为简单对象的实现JSON,而不是将传入活动转换为使用JSON-LD工具的本地上下文应该知道这一点并应准备接受所有三种陈述。

5.7Likes系列

每个对象5月有一个喜欢收藏。这是所有喜欢此对象的活动作为对象属性,添加为副作用.这个喜欢收集必须要么是 有序集合或a 收藏5月根据经过身份验证的用户的权限进行筛选或在未提供身份验证时视情况而定。

注释

应注意不要混淆喜欢名称相似但不同的集合喜欢收藏。总之:

5.8股份收款

每个对象5月有一个分享收藏。这是所有宣布此对象的活动作为对象属性,添加为副作用.这个分享收集必须要么是 有序集合或a 收藏5月根据经过身份验证的用户的权限进行筛选或在未提供身份验证时视情况而定。

6客户端到服务器的交互

定义的活动[ActivityStreams活动流]是核心机制用于在社交图中创建、修改和共享内容。

通过客户端发布进行客户端到服务器的交互演员的活动发件箱.为此,客户必须从中发现演员发件箱的URL他们的轮廓然后必须生成HTTP邮政对该URL的请求,其内容类型为application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站".服务器5月解释的Content-Type或Accept标头应用程序/活动+json等效application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站"用于客户端到服务器的交互。请求必须使用用户凭据进行身份验证发件箱属于谁。的主体邮政请求必须包含单个活动(其中5月包含嵌入对象),或单个非活动对象,其中将被包装在Create活动中由服务器.

例11:将活动提交到发件箱
邮政 /发件箱/HTTP/1.1协议主机:dustycloud.org授权:持票人XXXXXXXXXX内容类型:application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站"{“@context”: ["https://www.w3.org/ns/activitystreams网站",{“@语言”:“恩”}],“类型”:“喜欢”,“演员”:"https://dustycloud.org/chris网站/",“名称”:“Chris喜欢‘Minimal ActivityPub更新客户端’”,“对象”:"https://rhiaro.co.uk/2016/05/minimal-activitypub网站",“至”: ["https://rhiaro.co.uk/#amy","https://dustycloud.org/关注者","https://rhiaro.co.uk/关注者/"],“抄送”:"https://e14n.com/evan"}

如果提交的活动中包含身份证件属性,服务器必须忽略此项并生成新的身份证件用于活动。服务器必须返回a201创建HTTP代码,除非活动是暂时的,必须包括新的身份证件在中位置收割台。

示例12:对已提交活动的发件箱响应
HTTP/1.1协议201创建位置: https://dustycloud.org/likes/345

服务器必须删除bto公司和/或密件抄送属性(如果存在)交付,但必须利用最初存储的地址bto公司/密件抄送用于确定的属性中的收件人传送.

服务器必须然后将此新的“活动”添加到发件箱收藏。根据“活动”的类型,可能会要求服务器产生进一步的副作用。(但是,不能保证活动出现的时间发件箱。“活动”可能会在延迟后出现或在任何时间段消失)。这些按以下单个活动进行描述。

尝试将对象提交到未实现客户端到服务器的服务器支持应该导致405不允许的方法响应。

HTTP缓存机制[RFC7234协议]应该在以下情况下受到尊重适当,无论是在从服务器接收响应的客户端中作为服务器向客户端发送响应。

6.1客户端寻址

客户负责处理新活动适当地。在某种程度上,这取决于特定的客户实现,但客户端必须知道服务器只会将新活动转发给,bto公司,复写的副本,密件抄送、和观众领域。

这个粉丝集合和/或公共收藏都很好新活动的默认寻址选项。

客户应该查看通过对象,目标,inReplyTo中和/或标签字段,检索他们的 演员归属于属性,以及5月还检索它们的寻址属性,并将这些添加到复写的副本正在创建的新“活动”的字段。客户5月通过附加的对象递归,但如果这样做,应该为这个递归设置一个限制。(注意,这并不意味着客户应该“拆包”参与者集合作为单个接收者)。

客户5月让用户有机会在用户界面。

例如,当克里斯喜欢艾米的以下文章时:

例13:一篇文章
{“@context”: ["https://www.w3.org/ns/activitystreams网站",{“@语言”:“en-GB”}],“id”:"https://rhiaro.co.uk/2016/05/minimal-activitypub网站",“类型”:“文章”,“名称”:“最小活动Pub更新客户端”,“内容”:“今天我完成了morph,一个发布ActivityStreams2的客户端…”,“归属于”:"https://rhiaro.co.uk/#amy",“至”:"https://rhiaro.co.uk/关注者/",“抄送”:"https://e14n.com/evan"}

类似的由客户端生成为:

例14:文章的相似之处
{“@context”: ["https://www.w3.org/ns/activitystreams网站",{“@语言”:“恩”}],“类型”:“喜欢”,“演员”:"https://dustycloud.org/chris网站/",“摘要”:“Chris喜欢‘Minimal ActivityPub更新客户端’”,“对象”:"https://rhiaro.co.uk/2016/05/minimal-activitypub网站",“至”: ["https://rhiaro.co.uk/#amy","https://dustycloud.org/关注者","https://rhiaro.co.uk/关注者/"],“抄送”:"https://e14n.com/evan"}

然后,接收发件箱可以执行传送不仅是克里斯的追随者(类似者),还有艾米和艾米的followers和Evan,他们都收到了原始文章。

客户向发件箱 必须提供对象活动中的属性:创建,更新,删除,跟随,添加,删除,喜欢,,撤消(U).此外,客户向发件箱提交以下活动必须还提供目标属性:添加,删除.

6.2创建活动

这个创建活动在发布新对象时使用。这有一个副作用,即对象嵌入到Activity中(位于对象属性)。

创建活动已发布演员活动的应该复制到对象归属于字段。

Create活动的寻址与其对象可能会导致混淆。因此,服务器应该复制“创建”活动的所有收件人至其对象在初始分配时,同样从中复制收件人对象到包装上创建活动。请注意,对于对象的寻址稍后更改而不更改创建寻址(例如通过更新活动)。

6.2.1不带创建活动的对象创建

对于客户端到服务器的发布,可以为提交对象没有周围活动的创造。服务器必须接受有效的[ActivityStreams活动流]反对不是的子类型活动在POST请求中发件箱。然后是服务器必须将此对象作为对象创建活动.对于非瞬态对象,服务器必须附上身份证件到两个包装上创建及其包裹对象.

注释

这个位置服务器返回的值应为的URL新的Create活动(而不是对象)。

任何,bto公司,复写的副本,密件抄送,观众对象上指定的属性必须由服务器复制到新的Create活动。

例15:目标受众对象
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“备注”,“内容”:“这是一张便条”,“已发布”:“2015-02-10T15:04:55Z”,“至”: ["https://example.org/~约翰/“],“抄送”: ["https://example.com/~erik/追随者“,"https://www.w3.org/ns/activitystreams#公开"]}
上述示例可以转换为:
示例16:创建服务器生成的活动包装
{“@context”:"https://www.w3.org/ns/activitystreams网站",“类型”:“创建”,“id”:"https://example.net网站/~马洛里/87374“,“演员”:"https://example.net网站/~马洛里“,“对象”: {“id”:"https://example.com/~mallory/note/72“,“类型”:“备注”,“归属于”:"https://example.net网站/~马洛里“,“内容”:“这是一张便条”,“已发布”:“2015-02-10T15:04:55Z”,“至”: ["https://example.org/~约翰/“],“抄送”: ["https://example.com/~erik/追随者“,"https://www.w3.org/ns/activitystreams#公开"]},“已发布”:“2015-02-10T15:04:55Z”,“至”: ["https://example.org/~约翰/“],“抄送”: ["https://example.com/~erik/追随者“,"https://www.w3.org/ns/activitystreams#公开"]}

6.3更新活动

这个更新更新已存在的现有对象。这样做的副作用是对象 必须修改以反映更新中定义的新结构活动,假设参与者有权更新此对象。

6.3.1部分更新

对于客户端到服务器的交互,更新是部分的;而不是一次更新文档,任何键值提供的对用于将现有值替换为新值。这仅适用于更新的对象。一个特殊的例外是当值为json时无效的类型;这意味着该字段应该从服务器的对象表示中删除。

请注意,此行为用于客户端到服务器的交互,其中客户端仅向服务器发布。服务器到服务器的交互以及从服务器到客户端的更新应该包含对象的整个新表示已应用部分更新应用程序。请参阅的描述服务器到服务器的更新活动相互作用了解更多详细信息。

6.4删除活动

这个删除活动用于删除已现有对象。这样做的副作用是服务器5月更换对象用一个墓碑对象的将显示在引用已删除的对象。如果请求删除的对象,服务器应该用回应如果墓碑对象显示为响应主体,否则使用找不到HTTP 404。

已删除对象:

例17
{“@context”:"https://www.w3.org/ns/activitystreams网站",“id”:"https://example.com/~alice/note/72“,“类型”:“墓碑”,“已发布”:“2015-02-10T15:04:55Z”,“已更新”:“2015-02-10T15:04:55Z”,“已删除”:“2015-02-10T15:04:55Z”}

6.5关注活动

这个跟随活动用于订阅另一个演员的活动。

发件箱是服务器吗应该添加对象演员下列的收藏当且仅当接受活动随后进行收到此跟随活动作为其对象。

6.6添加活动

在收到添加活动进入发件箱,服务器应该添加对象到中指定的集合目标财产,除非:

6.7删除活动

收到后删除活动进入发件箱,服务器应该删除对象从中指定的集合目标财产,除非:

6.8类似活动

这个喜欢活动表示演员喜欢这个对象.

发件箱是服务器吗应该添加对象演员喜欢收藏.

6.9区块活动

这个活动用于指示过帐actor不需要另一个actor(在对象属性)能够与参与者发布的对象交互发布活动。服务器应该阻止被阻止的用户与任何对象交互由演员发布。

服务器不应该向他们的对象.

6.10撤消活动

这个撤消(U)activity用于撤消前一个活动。请参阅上的活动词汇文档反向活动和“撤消”.例如,撤消(U)可用于撤消上一个喜欢,跟随,或.撤消活动和正在撤消的活动必须两者都有同一个演员。应尽可能消除副作用。例如,如果撤消喜欢,任何有之前增加的值应适当减少。

有一些例外,其中存在一个现有的和显式的应改用“反向活动”。创建基于的活动应改为使用删除、和添加活动应使用删除.

6.11送货

联合服务器必须对发布到发件箱根据开箱交货.

6.12上传媒体

本节不规范。

服务器5月支持上传要在中引用的文档类型活动,如图像、视频或其他二进制数据,但精确的机制超出了此版本ActivityPub的范围。社交网络社区小组正在完善ActivityPub Media Upload报告.

7服务器到服务器的交互

服务器与其他服务器通信并跨通过向演员发布活动的社交图收件箱端点。通过网络发送的活动应该有一个身份证件,除非它是瞬态的(在这种情况下5月省略身份证件).

邮政请求(例如发送到收件箱)必须内容类型为application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站"GET(获取)请求(另请参见3.2 检索对象) Accept标头为application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站".服务器应该解释Content-Type或Accept页眉,共页应用程序/活动+json等效application/ld+json;profile=“https://www.w3.org/ns/activitystreams网站"用于服务器到服务器的交互。

为了在整个社交图中传播更新,活动发送给相应的收件人。首先,这些收件人是通过以下方式确定的对象之间的适当链接,直到到达参与者,然后活动被插入演员的收件箱(传送).这允许收件人服务器:

交付通常由以下因素触发:

服务器正在向收件箱共享收件箱其他服务器上参与者的属性必须提供对象活动中的属性:创建,更新,删除,跟随,添加,删除,喜欢,,撤消(U).此外,服务器执行服务器到服务器的以下活动必须还提供目标属性:添加,删除.

HTTP缓存机制[RFC7234协议]应该在以下情况下受到尊重在接收来自其他服务器的响应时都是适当的作为向其他服务器发送响应。

7.1送货

与通信的联邦服务器需要以下内容仅限其他联邦服务器。

将活动交付给其目标(即演员)首先查找目标收件箱,然后将活动发布到这些收件箱。交付目标通过检查ActivityStreams受众定位;,bto公司,复写的副本,密件抄送、和观众活动的字段。

这个收件箱由第一个确定检索目标参与者的JSON-LD表示然后抬头看收件箱属性。如果收件人是收藏有序集合,然后是服务器必须取消引用集合(使用用户的凭据)并发现集合中每个项目的收件箱。服务器必须通过限制间接寻址的层数将执行的集合,其中5月成为其中之一。

服务器必须删除最终收件人列表的副本。服务器必须从列表中排除与演员被通知的活动。也就是说,演员不应该自己的活动交付给自己。

注释:无声和私人活动

未定义未指定收件人时的操作,但是,建议如果未指定收件人,则将对象保持完全私有,访问控制限制访问对象。如果对象刚发送到“public”集合,则对象为未交付给任何演员,但可以在演员的发件箱。

HTTP POST请求(具有提交用户的授权)是然后制作成收件箱,活动为请求的正文。此活动由接收方添加为项目在中收件箱OrderedCollection。尝试传递到非联合服务器上的收件箱应该导致405不允许的方法响应。

对于向第三方服务器执行交付的联邦服务器,传送应该异步执行,以及应该另外如果由于网络错误导致传递失败,请重试传递给收件人。

注:参与者之间分配的活动相同的原点可以使用任何内部机制,并且不是必需的使用HTTP。

注释:与链接数据通知的关系

虽然理解本说明书不需要阅读,值得注意的是,ActivityPub的目标定位和交付机制与链接数据通知规范,这两个规范可以互操作合并。特别是收件箱属性之间相同ActivityPub和链接数据通知,以及目标支持本文档中描述的交付系统通过链接数据通知。除了JSON-LD压缩的ActivityStreams文档外,Linked数据通知还支持许多RDF序列化ActivityPub实现不需要。然而,ActivityPub实现希望更广泛与链接数据通知实现兼容支持其他RDF表示。

7.1.1服务器到服务器的发件箱交付要求

当对象在发件箱(适用于同时支持这两种功能的服务器客户端到服务器的交互服务器到服务器的交互),服务器必须目标并交付给:

  • 这个,bto公司,复写的副本,密件抄送观众字段的值是演员拥有的个人或收藏品。

这些字段将由客户端适当填充发布活动的发送到发件箱。

7.1.2从收件箱转发

注释:转发以避免重影回复问题

以下部分是为了缓解“重影回复”问题这有时会导致联邦网络出现问题。这个问题最好用一个例子来说明。

Alyssa发布了一篇帖子,内容是她成功地展示了在一次会议上发表论文,并将其发送给她的追随者收藏,其中包括她的朋友本。Ben回复了Alyssa的贺信,其中包括她的追随者收集收信人。然而,本无法见到艾丽莎的成员关注者集合,因此他的服务器不会转发他的消息发送到他们的收件箱。如果没有以下机制,如果艾丽莎当时回答Ben,她的追随者会看到Alyssa没有回答Ben曾见过本互动。这将非常令人困惑!

当活动在收件箱,的服务器需要将这些转发给源站无法发送的收件人将其交付给。为此,服务器必须目标和传送价值观,复写的副本,和/或观众当且仅当以下所有条件都成立时:

  • 这是服务器首次看到此“活动”。
  • 的值,复写的副本,和/或观众包含服务器拥有的集合。
  • 的值inReplyTo中,对象,目标和/或标签是属于的对象服务器。服务器应该递归这些值以查找链接对象由服务器所有,以及应该设置递归的最大限制(即线索如此之深,收件人的追随者可能不会介意如果他们不再获得不直接涉及收件人)。服务器必须仅以的值为目标,复写的副本,和/或观众在转发的原始对象上,而不拾取任何新对象通过链接对象递归时的收件人(如果这些收件人是由客户或通过客户有意修改的)。

服务器5月根据以下内容筛选其交付目标特定于实现的规则(例如,垃圾邮件过滤)。

7.1.3共享收件箱传递

对于承载多个参与者的服务器,向所有关注者交付可以导致发送大量消息。一些服务器还希望显示所有消息的列表公开发布到“已知网络”。因此,ActivityPub提供了一种可选的机制来提供这些服务两个用例。

当对象被传递到原始参与者的关注者,服务器5月减少接收参与者的数量通过识别共享相同内容的所有关注者来传递给共享收件箱否则谁将是个人收件人,而不是交付要说的对象共享收件箱.因此,在这种情况下,远程/接收服务器参与确定目标并向特定收件箱。

此外,如果对象的地址是公共特别收藏,a服务器5月将该对象传递给所有已知的共享收件箱网络上的端点。

源服务器将公开寻址的活动发送到共享收件箱端点必须仍向演员交付以及以其他方式处理的收款(通过,bto公司,复写的副本,密件抄送、和观众)没有共享收件箱并且不会通过共享收件箱机制。

7.2创建活动

接收创建中的活动收件箱令人惊讶的是,副作用很少;活动应出现在演员的收件箱服务器很可能需要本地存储此活动及其附带的表示对象。然而,这通常发生在处理活动中交付给收件箱无论如何。

7.3更新活动

对于服务器到服务器的交互更新活动表示接收服务器应该更新其副本对象相同的身份证件复制到副本在中提供更新活动。更新活动的客户端到服务器处理,这不是部分更新,而是对象的完全替换。

接收服务器必须注意确保更新被授权修改其对象.至少可以通过确保更新及其对象具有相同的起源。

7.4删除活动

收到这封信的副作用是(假设对象由发送参与者/服务器所有)接收删除活动的服务器应该删除其表示对象用同样的身份证件、和5月将该表示替换为墓碑对象。

(请注意,活动从源传输后服务器到远程服务器,ActivityPub中没有任何内容协议可以执行远程删除对象的表示)。

7.5关注活动

收件箱服务器应该生成接受拒绝以Follow作为对象并将其交付给演员跟随。这个接受拒绝 5月生成自动,或5月是用户输入的结果(可能在用户审查的一些延迟)。服务器5月选择不显式发送拒绝作为对跟随尽管实现者应该请注意,发送请求的服务器可能位于中间状态。例如,服务器可能不会发送拒绝以保护用户的隐私。

如果收到接受引用此跟随作为对象,服务器应该添加演员到对象参与者的粉丝集合.如果是拒绝,服务器不能添加参与者到对象参与者的粉丝集合.

注释

有时一个成功的跟随认购可以发生,但在未来的某个时间点,交付给跟随者失败延长一段时间。实施人员应意识到没有任何保证网络上的参与者将保持联系,并且应该相应地实施。例如,如果试图向演员提供六个月后,追随者仍然无法联系到传送服务器删除订阅者是合理的来自追随者列表。处理无法联系到的参与者的时间框架和行为是由传送服务器自行决定。

7.6接受活动

收件箱由的类型决定对象收到,并且可以接受本文档中未描述的类型(例如要约).

如果对象接受接收到收件箱是一个跟随活动之前由接收方、服务器发送应该添加演员到接收人的以下集合.

7.7拒绝活动

收件箱由的类型决定对象收到,并且可以拒绝本文档中未描述的类型(例如要约).

如果对象拒绝接收到收件箱是一个跟随活动之前由接收方发送,这意味着接收方没有批准跟随请求。服务器不能添加演员到接收人的以下集合.

7.8添加活动

在收到添加活动进入收件箱,服务器应该添加对象到中指定的集合目标财产,除非:

7.9删除活动

收到后删除活动进入收件箱,服务器应该删除对象从中指定的集合目标财产,除非:

7.10类似活动

收件箱服务器应该将对象的赞数增加将收到的活动添加到喜欢收集如果存在此集合。

7.11宣布活动(共享)

在收到宣布中的活动收件箱,服务器应该增加对象的计数通过将收到的活动添加到分享收集如果存在此集合。

注释
这个宣布活动实际上就是众所周知的在其他社交网络中“分享”、“转发”或“提升”。

7.12撤消活动

这个撤消(U)活动用于撤消副作用之前的活动。请参阅上的ActivityStreams文档反向活动和“撤消”.范围和限制撤消(U)活动与的相同客户端到服务器上下文中的撤消活动相互作用,但应用于联合上下文。

答:。国际化

本节不规范。

在联邦中建立国际用户基础非常重要网络。ActivityStreams为内容国际化提供了工具,应尽可能使用。然而,实现可能很难确定 @语言财产提供用户提交的内容。这个W3C公司国际化集团提供了一些语言检测指南.

B。安全注意事项

本节不规范。

B.1节身份验证和授权

ActivityPub将身份验证用于两个目的;首先,到对服务器的客户端进行身份验证,然后在联邦中进行身份验证实现相互验证服务器。

不幸的是,在标准化的时候商定的身份验证机制。列出了一些可能的身份验证方向英寸社交网络社区组身份验证和授权最佳实践报告.

B.2节验证

服务器不应信任客户端提交的内容,并且联邦服务器也不应该信任从服务器接收的内容除了内容的来源之外,没有任何形式的验证。

服务器应仔细验证是否确实发布了新内容由声称发布它的演员发布,并且该演员已经更新其声明的资源的权限。另请参阅三。 物体B.1节 身份验证和授权.

B.3节访问本地主机URI

在开发过程中进行测试通常很方便在localhost上运行。但是,允许在生产客户端或服务器实例可能很危险。向本地主机上的URI发出不需要的请求授权可能会无意中访问或修改假定的资源被保护为仅可由本地主机使用。

如果您的ActivityPub服务器或客户端允许向出于开发目的的localhost URI,请考虑将其设置为默认为关闭的配置选项。

B.4节URI方案

除了http协议https(https).一些库处理各种URI方案的提取请求可能会努力变得聪明,并参考可能不受欢迎的方案,例如文件.客户端和服务器作者应仔细检查其库处理请求,并可能只白名单某些安全URI类型,例如http协议https(https).

B.5节递归对象

服务器应限制解析对象时递归的深度,或以其他方式专门处理具有递归的ActivityStreams对象参考文献。未能正确执行此操作可能会导致拒绝服务安全漏洞。

B.6垃圾邮件

垃圾邮件在任何网络中都是一个问题,尤其是在联邦网络中网络。虽然中没有提供特定的反垃圾邮件机制ActivityPub,建议服务器过滤传入内容本地不受信任用户和任何远程用户通过垃圾邮件过滤器。

B.7节联盟拒绝服务

服务器应实施防止拒绝服务的保护来自其他联邦服务器的攻击。这可以通过使用某种速率限制来实现机制。服务器在实施此保护时应特别小心围绕涉及副作用的活动。服务器应该还要注意不要让服务器过载提交,例如使用指数退避策略。

B.8节客户端到服务器的速率限制

服务器应限制API客户端提交。这有两个目的:

  1. 它可以防止恶意客户端进行对服务器的拒绝服务攻击。
  2. 它确保服务器不会分发这么多它触发另一个服务器的拒绝服务保护.

B.9节客户端到服务器响应拒绝服务

为了防止客户因超大尺寸而超载集合,服务器应注意限制集合的大小他们返回给客户的页面。客户仍应准备限制如果他们连接到恶意或受损服务器,例如通过超时和生成一个错误。

B.10消毒内容

为浏览器(或其他富启用文本的应用程序)应注意清除字段包含标记以防止跨站点脚本攻击。

B.11节不显示bto和bcc属性

bto公司密件抄送已经必须拆下才能交付,但服务器可以自由决定如何表示对象在他们自己的存储系统中。然而,由于bto公司密件抄送仅用于对象/活动的原始作者所知/所见,服务器在显示时也应该忽略这些属性。

C、。致谢

本节不规范。

本规范来源于一位在web上探索联合空间的社区数量。特别是,本规范的大部分内容是由O状态泵API,由StatusNet(现在的GNU Social)和Pump.io率先推出。这两项举措都是许多开发人员辛勤工作的成果,但埃文·普罗德罗莫比任何人都是这方面的领导者空间,ActivityPub不太可能存在于没有他的努力工作,就很像现在的状态。

埃林·谢泼德(Erin Shepherd)构建了本规范的初始版本,借用了来自泵API文档,主要是作为文本的完整重写,但共享大部分从ActivityStreams 1切换到ActivityStreams 2。

杰西卡·塔隆和克里斯汀·莱默·韦伯在标准移至W3C公司社会工作组和做了大多数从埃林·谢泼德的文件过渡到目前的状态活动出版物。在长期的反馈下,文件的大部分内容都被改写和重组了社会工作组的进程。

ActivityPub由许多会员在W3C公司社会工作组。ActivityPub特别感谢艾米·盖伊,她做得更多比任何人都能在不同的社会工作组中找到想法通过她的工作记录[社会网络协议].Amy还为对与Christopher Allan一起冲刺四天的活动Pub规范韦伯。这些修订使客户机到服务器之间的分离更加清晰和服务器组件,以及ActivityPub关系的明确性至[后勤数字]在许多其他改进中。还特别感谢Benjamin Goering将实施报告模板。我们也感谢mray制作了壮观的教程插图(与本协议其余部分的许可证相同文档)。

许多人还通过仔细审查帮助了ActivityPub。尤其要感谢:亚伦·帕雷基,AJ Jordan,本杰明·戈林,Caleb Langeslag,埃尔萨·巴尔德拉玛,精灵帕夫利克,尤根·罗奇科,埃里克·王尔德,杰森·罗宾逊,马努·斯波尼,迈克尔·沃格尔,Mike Macgirvin,夜池,帕克·梅尔伯格,桑德罗·霍克,Sarven Capadisli,坦特克·切利克和尤里·沃尔科夫。

这份文件是献给地球上所有公民的。你应该有交流的自由;我们希望我们在朝着这个目标和正确的方向前进的一部分,尽管很小。

D。工具书类

D.1款规范性引用文件

[活动-词汇]
活动词汇J.斯奈尔。ActivityStreams工作组。编辑草稿。网址:https://www.w3.org/TR/activitystreams-vocabulary/
[活动流]
活动流2.0J.斯奈尔。ActivityStreams工作组。编辑草稿。网址:https://www.w3.org/TR/activitystreams-core网站/
[JSON-LD]
JSON-LD 1.0版马努·斯波尼;格雷格·凯洛格(Gregg Kellogg);马库斯·兰塔勒。W3C公司。2014年1月16日。W3C建议。网址:https://www.w3.org/TR/json-ld/
[本地数字]
链接数据通知萨文·卡帕迪斯利;艾米·盖伊。W3C公司。2017年5月2日。W3C建议。网址:https://www.w3.org/TR/ldn/
【RFC2119】
RFC中用于指示需求级别的关键词.S.布拉德纳。IETF。1997年3月。当前最佳实践。网址:https://tools.ietf.org/html/rfc2119
[RFC7231]
超文本传输协议(HTTP/1.1):语义和内容R.Fielding编辑。;J.Reschke,编辑,IETF。2014年6月。拟议标准。网址:https://tools.ietf.org/html/rfc7231
[RFC7234]
超文本传输协议(HTTP/1.1):缓存R.Fielding编辑。;M.诺丁汉,编辑。;J.Reschke,编辑,IETF。2014年6月。拟议标准。网址:https://tools.ietf.org/html/rfc7234

D.2款参考资料

[微型酒吧]
微型酒吧亚伦·帕雷基。W3C公司。2017年5月23日。W3C建议。网址:https://www.w3.org/TR/micropub网站/
[参考文献6749]
OAuth 2.0授权框架D.Hardt,IETF编辑。2012年10月。拟议标准。网址:https://tools.ietf.org/html/rfc6749
[RFC6750]
OAuth 2.0授权框架:承载令牌使用.M.琼斯;D.硬度。IETF。2012年10月。拟议标准。网址:https://tools.ietf.org/html/rfc6750
[社会网络协议]
社交网络协议艾米·盖伊。W3C公司。2017年12月25日。W3C注释。网址:https://www.w3.org/TR/social-web-protocols网站/