🍓
[Mastodon, Misskey]10種類のWebフレームワークでActivityPub実装(StrawberryFields)
メリークリスマス
この記事はFediverse (3) Advent Calendar 2020の23日目です。明日はID:weepさんの「#InstanceTicker のあれやこれ!」です。
今回16種類のWebフレームワークでActivityPub実装を行うプロジェクト「StrawberryFields」を立ち上げました。
TL;DR
- Mastodon上でActivityPub実装をフォロー、アンフォローできるようにする。
- 実装したサーバーににcurlで直接クエリをPOSTし、Mastodonアカウントをフォロー、アンフォローできるようにする。
今回は上記2点を目標とし、実装していきたいと思います。そのために必要な技術は以下のとおりです。
- Webアプリケーションフレームワークを使用してサーバーからJSONのレスポンスを返す。
- HTTPリクエストクライアントを使用してサーバーからJSONのリクエストを送る。
- サーバーから返す必要のあるレスポンスヘッダ、レスポンスボディを理解する。
- サーバーから送る必要のあるリクエストヘッダ、リクエストボディを理解する。
- ActivityPubを実装する。
- Actorのエンドポイントを発見できるようにする必要があるため、WebFingerを実装する。
- Activityに必要なActivity Streamsを理解する。
- 必要なJSON-LDとしてActivity VocabularyとSecurity Vocabularyを理解する。
- サーバーから送るリクエストに署名をする必要があるため、HTTP Message Signatures(旧HTTP Signatures)を実装する。
- なるほどRSA-SHA256の署名と検証を学ぶ必要があったんですね。
- SHA-256?
- RSA難しい。
- ActivityPubって何だ?
- ActivityPub何もわからん。
- ?????????
- ActivityPub完全に理解した。
最初からMVCに基づいたSNSを作っても破綻するし、ActivityPubチョットデキルことを目標としたほうが良さそうなので、まずは10種類のWebフレームワークでActivityPub実装することにしました。
当初JavaのSparkとSpringでも実装を行う予定で12種類だったのですが、コンテナの都合上未定となりました。
実装
2022/07/20更新:やる気のない文章を残しておいても陰口を叩かれるだけ誰も得しないのでソースコード全文貼り付けるだけにしました。よかったですね。
2024/01/05更新:昨年JavaをはじめとしたJVM言語の実装に成功したので4種類のソースコードと続編記事を追加しました。
2024/03/10更新:C#とRustの実装に成功したので2種類のソースコードを追加しました。
MIT License
Copyright (c) 2020, 2021, 2022, 2023, 2024 Acefed
Express
Fastify
Flask
FastAPI
Lumen
Laravel
Sinatra
Rails
Gin
Django
Spark
Spring
Ktor
Play
.Net
Actix
参考文献
以下2024/03/10更新
- SocialHub - ActivityPub Special Interest Group
- ActivityPub
- Activity Streams 2.0
- Activity Vocabulary
- WebFinger
- RFC 7033 - WebFinger
- RFC 7033 - WebFinger 日本語訳
- HTTP Message Signatures Sandbox
- RFC 9421 - HTTP Message Signatures
- RFC 9421 - HTTP Message Signatures 日本語訳
- ActivityPubの概要 - Qiita
- Mastodonにアカウントとして認識されるActivityPubを実装してみる - Qiita
- Mastodonからフォロー出来て投稿が反映されるActivityPubを実装してみる - Qiita
- GitHub - dariusk/express-activitypub: A very simple reference implementation of an ActivityPub server using Express.js
- GitHub - dariusk/rss-to-activitypub: An RSS to ActivityPub converter.
- GitHub - mastodon/mastodon: Your self-hosted, globally interconnected microblogging community
- Pleroma / pleroma · GitLab
- GitHub - misskey-dev/misskey: 🌎 An interplanetary microblogging platform 🚀
以下2024/04/06更新
- ActivityPub and WebFinger
- ActivityPub and HTTP Signatures
- Social Web Protocols
- ActivityStreams 2.0 Terms
- https://www.w3.org/ns/activitystreams.jsonld
- Security Vocabulary
- https://w3c.github.io/vc-data-integrity/vocab/security/vocabulary.jsonld
- The Security Vocabulary
- https://w3id.org/security/v1
- DID Core v1.0 Terms
- https://www.w3.org/ns/did/v1
- Verifiable Credential Data Integrity 1.0
- https://w3id.org/security/data-integrity/v2
- https://w3id.org/security/multikey/v1
- https://w3id.org/security/jwk/v1
Discussion