历史/为什么我应该关心Mastodon或Fediverse
最近,在社交媒体上想要自主权的人数涌入。人们重视他们的隐私和思考,为什么我们必须去X.com,facebook.com或instagram.com进行社交?我们为什么不能启动自己的社交媒体?
直到最近,答案是因为构建社交媒体很昂贵,难以设置,并且要求用户关注即使是突破。普通的开发人员,更不用说一个人不会醒来并建立社交媒体了。但是,这正在改变。
Mastadon赞扬我们对社交媒体的看法。 Mastodon是在Fediverse运行的X(以前是Twitter)克隆。
联邦政府如何存在
Fediverse是一组服务器联合会,他们同意通过ActivityPub(AP)协议进行通信。像HTTP,SMTP,DNS等。AP协议指定服务器应如何通信以充当社交媒体网站。
例如,电子邮件协议要求所有电子邮件客户端/服务器遵守一组规则。这些规则决定了如何发送和接收电子邮件的方式。这使得可以将消息从Yahoo.com发送到Google.com的示例,而无需集中权限。
Fediverse常见问题解答
那么这对社交媒体意味着什么?
这意味着您可以拥有像wadecodez
这样的用户名和像dev.to
这样的自定义域名,并且当handle wadecodez@dev.to
发表帖子时,它将用于所有其他平台。张贴一旦到处通信。
那mastodon是什么?
mastodon是选择表现得像Twitter的AP协议的实现。实施AP协议的站点可以自由存在并按照他们的意愿行事。像https://pxlmo.com
和https://peertube.tv/
这样的网站是完全独立的想法,但是它们可以相互交流。 尊重其他服务器的内容取决于您的服务器。
我需要制作一个Mastodon实例才能加入Fediverse吗?
否。只要您实施最低限度,您的博客就可以成为Fediverse的成员!
如何创建最低限度与Fediverse加入
简单选择您选择的语言/框架以接收HTTP请求。 Python,Ruby,Node,PHP ...然后您将创建端点,以发现用户,查询用户配置文件并返回收件箱/Outbox的内容。
1.允许发现
其余的互联网需要一种检查您的服务器是否是Fediverse的成员。这是根据Webfinger协议完成的。如果有效的JSON响应从预期的端点返回,则其他网站可以假设您的服务器可能支持Fediverse活动。
// handles https://example.com/.well-known/webfinger?resource=acct:alice@example.com
Route::get('/.well-known/webfinger', function (Request $request) {
// todo should be dynamic and validated
$subject = 'acct:alice@example.com';
$handle = '@example.com';
$username = Str::between($subject, 'acct:', $handle);
return myJson([
'subject' => $subject,
'aliases' => [
'https://example.com/users/alice',
],
'links' => [
[
"rel" => "http://webfinger.net/rel/profile-page",
"type" => "text/html",
"href" => 'https://example.com/users/alice',
],
[
'rel' => 'self',
'type' => 'application/activity+json',
'href' => 'https://example.com/activityPub/users/alice',
]
],
]);
});
2.查询用户的个人资料
上面的代码指定https://example.com/activityPub/users/alice
支持application/activity+json
内容类型。当其余的互联网看到此URL时,他们会希望您返回ActivityPub Person
类型。 See specification
但是,由于大多数网站期望这个人是演员,所以我们还需要与specification符合演员类型:
Route::get('/activityPub/users/{user}', function (Request $request, User $user) {
return myJson([
'@context' => 'https://www.w3.org/ns/activitystreams',
'type' => 'Person',
'id' => 'https://example.com/activityPub/users/alice',
'name' => 'Test User',
'preferredUsername' => 'alice123',
'summary' => 'my favorite food is pizza',
'inbox' => 'https://example.com/activityPub/users/alice/inbox',
'outbox' => 'https://example.com/activityPub/users/alice/outbox',
]);
})->name('activityPub.user');
3.返回一个空收件箱和输出箱
最后要做的是确保收件箱/输出箱包含数据。这两个盒子都是有序的。 see spec
Route::get('/activityPub/users/{user}/inbox', function (Request $request, User $user) {
return myJson([
'@context' => 'https://www.w3.org/ns/activitystreams',
'summary' => 'Inbox for alice',
'type' => 'OrderedCollection',
'totalItems' => 0,
'orderedItems' => [],
]);
})->name('activityPub.inbox');
Route::get('/activityPub/users/{user}/outbox', function (Request $request, User $user) {
return myJson([
'@context' => 'https://www.w3.org/ns/activitystreams',
'summary' => 'Outbox for alice',
'type' => 'OrderedCollection',
'totalItems' => 0,
'orderedItems' => [],
]);
})->name('activityPub.outbox');
您现在在Fediverse!
现在,当您部署应用程序并在HTTPS上服务时,您应该通过Mastadon等网站查看个人资料。 您可能必须登录上述平台才能触发帐户发现
怎么办?
实现协议的其他部分,但基本上是做任何您想做的。制作博客,制作一个todo应用,在整个Fediverse中可以看到协议的任何内容!