🍓
[Mastodon, Misskey]10種類のWebフレームワークでActivityPub実装(StrawberryFields)
メリークリスマス
この記事はFediverse (3) Advent Calendar 2020の23日目です。昨日はしゅまりさんの「この日でgensokyo.townが3年目なので徒然なるままに何か」、明日はID:weepさんの「#InstanceTicker のあれやこれ!」でした。
今回10種類のWebフレームワークでActivityPub実装を行うプロジェクト「StrawberryFields」を立ち上げました。
TL;DR
- Mastodon上でフォロー、アンフォローできるようにする。
- curlで直接URLへPOSTしMastodonアカウントをフォロー、アンフォローできるようにする。
今回は上記2点を目標とし、実装していきたいと思います。そのために必要な技術は以下のとおりです。
- Web frameworkを使用してリクエストを受け取り、レスポンスを返す。
- HTTP Clientを使用してリクエストを受け取り、レスポンスを返す。
- リクエストヘッダ、リクエストボディを受け取る。
- レスポンスヘッダ、レスポンスボディを返す。
- ActivityPubを実装する。
- MastodonがサーバーをGETしてくれるようにするため、Webfingerを実装する。
- MastodonがサーバーをGETしてくれるようにするため、Activity Streamsを実装する。
- 必要なJSON-LDとしてActivity VocabularyとSecurity Vocabularyを理解する。
- 署名をする必要があるので、Signing HTTP Messages(旧HTTP Signatures)を実装する。
- なるほどRSA-SHA256の署名と検証を学ぶ必要があったんですね。
- SHA256?
- RSA難しい。
- ActivityPubって何だ?
- ActivityPub何もわからん。
- ?????????
- ActivityPub完全に理解した。
最初からMVCに基づいたSNSを作っても破綻するし、ActivityPubチョットデキルことを目標としたほうが良さそうなので、10種類のWebフレームワークでActivityPub実装することにしました。
当初JavaのSparkとSpringでも実装を行う予定で12種類だったのですが、コンテナの都合上未定となりました。
実装
2022/07/20追記
やる気のない文章を残しておいても陰口を叩かれるだけ誰も得しないのでソースコード全文貼り付けるだけにしました。よかったですね。
MIT License
Copyright (c) 2020, 2021, 2022 Acefed
Express
Fastify
Flask
FastAPI
Lumen
Laravel
Sinatra
Rails
Gin
Django
参考文献
- SocialHub - ActivityPub Special Interest Group
- ActivityPub
- Activity Streams 2.0
- Activity Vocabulary
- RFC 7033 - WebFinger
- 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 🚀
- https://www.w3.org/ns/activitystreams.jsonld
- https://www.w3.org/2018/credentials/v1
- https://www.w3.org/2018/credentials/examples/v1
- https://www.w3.org/ns/did/v1
- https://w3c-ccg.github.io/security-vocab/contexts/security-v1.jsonld
- https://w3c-ccg.github.io/security-vocab/contexts/security-v2.jsonld
- https://w3c-ccg.github.io/security-vocab/contexts/security-v3-unstable.jsonld
- https://w3c-ccg.github.io/lds-jws2020/contexts/v1/
- https://w3c-ccg.github.io/ldp-bbs2020/contexts/v1/
Discussion