如何加入fediverse和out mastodon
#初学者 #编程 #php #fediverse

历史/为什么我应该关心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.comhttps://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等网站查看个人资料。 您可能必须登录上述平台才能触发帐户发现

Proof that it works

怎么办?

实现协议的其他部分,但基本上是做任何您想做的。制作博客,制作一个todo应用,在整个Fediverse中可以看到协议的任何内容!