🍓

[Mastodon, Misskey]10種類のWebフレームワークでActivityPub実装(StrawberryFields)

2020/12/23に公開約4,000字

メリークリスマス

この記事はFediverse (3) Advent Calendar 2020の23日目です。昨日はしゅまりさんの「この日でgensokyo.townが3年目なので徒然なるままに何か」、明日はID:weepさんの「#InstanceTicker のあれやこれ!」でした。

今回10種類のWebフレームワークでActivityPub実装を行うプロジェクト「StrawberryFields」を立ち上げました。

https://acefed.gitlab.io/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

https://gitlab.com/acefed/strawberryfields-express/-/blob/master/index.js

Fastify

https://gitlab.com/acefed/strawberryfields-fastify/-/blob/master/index.js

Flask

https://gitlab.com/acefed/strawberryfields-flask/-/blob/master/app.py

FastAPI

https://gitlab.com/acefed/strawberryfields-fastapi/-/blob/master/app.py

Lumen

https://gitlab.com/acefed/strawberryfields-lumen/-/tree/master/app/Http/Controllers

Laravel

https://gitlab.com/acefed/strawberryfields-laravel/-/tree/master/app/Http/Controllers

Sinatra

https://gitlab.com/acefed/strawberryfields-sinatra/-/blob/master/app.rb

Rails

https://gitlab.com/acefed/strawberryfields-rails/-/tree/master/app/controllers

Gin

https://gitlab.com/acefed/strawberryfields-gin/-/blob/master/main.go

Django

https://gitlab.com/acefed/strawberryfields-django/-/blob/master/app/views.py

参考文献

Discussion

ログインするとコメントできます