@kussy_tessy そうです。account_idはサーバ固有です。
たとえば私のaccount_idは1ですが、そんな番号になるのは、もちろんサーバごとだからです。
ActivitiPub全体でのIDは、URI形式で https://fedibird.com/users/noellabo になります(リンクに変換されるので画像もつけておきます)。
@noellabo なるほど。
/api/v1/accounts/:idが「おたくのサーバーでIDが:idって人がいるらしいんですけど、どこの誰ですか?」で/api/v1/accounts/lookup?acct=:acctが「Fedivirse界に:acctってやつがいるみたいなんですけど、おたくはご存知ですか? 知ってたらIDは何番ですか?」みたいな感じですかね?
@kussy_tessy うん、そうそう。
クライアントアプリ書くときは特にそうなんだけど、サーバをまたいだマルチアカウント対応して、違うサーバのアカウントでブーストするとか、サーバを跨いだ操作をしたくなることがあるんで、そういうときに違うサーバのaccount_idとかstatus_idを調べないといけないのね。
ユーザー操作に対応する場合は、別に検索用のAPIも使えるんだけど、だいたいそんな感じ!
@noellabo SubwayTooterで叩いているAPIが見えるんですけど、何回か異なるAPIを叩いているみたいなんですよね。必然的に通信回数は増えるものの、サーバー間の違いやアカウントの違いををあまり意識せずにフォローやブーストができるの、うまくできている仕組みだなあ……。
@noellabo ということは、基本的にはaccount_idの一番大きい数字が「fedibirdが知っている全てのActivityPubアカウント数」ってことになりますね?
@kussy_tessy Mastodonの途中のバージョンまでは連番だったんだけど、途中から推定しづらいSnowFlakeと呼ばれるID形式に変わっています。
大小比較はできるので、ID同士でどちらが新しいものかは判定できるんですが、桁はムチャクチャ大きくなっているので、そこから総数はさっぱりわかりません!
@noellabo Snowflake ID - Wikipedia https://en.wikipedia.org/wiki/Snowflake_ID
SnowFlake初めて聞きました! なにげにTwitterが開発した方式ってのが皮肉ですね……w(技術とサービスは別とはいえ)
@kussy_tessy twitter-textっていう、URLやIDを抽出したり文字数数えたりするライブラリも使ってますよ。そんなにアンチじゃないですw
@noellabo そう考えると、Twitterが築き上げたものって大きかったんだなあ、って感慨深くなりますね。
@kussy_tessy APIは、クライアントと直接やりとりするサーバの間のやりとりを規定していて、他のサーバとのやりとりは想定されていません。
たとえば noellabo@fedibird.com という文字列からaccount_idを知りたい時は、/api/v1/accounts/lookup?acct=noellabo@fedibird.com というAPIコールを行って取得します。
グローバルな表現と、ローカルな表現を、必要な時に変換しながら操作します。