HVDSGMの仕様を少し整理した

これまでのあらすじ

サービス

HVDSGMは複数のサービスの集合体として構成されるミニブログである。それぞれのサービスは複数のホストに分散していてもよい。サービスは以下のものがある。

  • ソーシャルグラフサービス
  • テキストサービス
  • マルチメディアサービス
  • 疫病サービス

ソーシャルグラフサービス

ソーシャルグラフサービスはユーザー (複数) のレコードを永続化する。ユーザーは以下のフィールドを持つ。

  • ユーザー名 (単数、独自のログイン機構を持つ場合)
  • パスワード (単数、独自のログイン機構を持つ場合)
  • スクリーンネーム (単数、文字列)
  • Bio (単数、文字列)
  • 観察対象のソーシャルグラフサービスのユーザーURL (複数)
  • テキストサービスのユーザーURL (単数)
  • テキストサービスのユーザーURLのタイムスタンプ (単数、Unixエポックからの秒数)

ソーシャルグラフサービスにログインしているユーザーは、パスワード、スクリーンネーム、Bio、テキストサービスのユーザーURLを変更できる。このうち、テキストサービスのユーザーURLが変更されたときは、テキストサービスのユーザーURLのタイムスタンプが更新される。また、観察対象のソーシャルグラフサービスのユーザーURLを追加または削除することができる。

ソーシャルグラフサービスのユーザーには一意なURLが割り当てられる。これをソーシャルグラフサービスのユーザーURLという。このURLに対してGETメソッドを要求すると、以下の情報が得られる。

  • スクリーンネーム
  • Bio
  • 観察対象のソーシャルグラフサービスのユーザーURL
  • テキストサービスのユーザーURL
  • テキストサービスのユーザーURLのタイムスタンプ

テキストサービス

テキストサービスはホスト設定 (単数) のレコードを永続化する。ホスト設定は以下のフィールドを持つ。

  • 信頼するマルチメディアサービスのホスト名 (複数)

テキストサービスはユーザー (複数) のレコードを永続化する。ユーザーは以下のフィールドを持つ。

  • ユーザー名 (単数、独自のログイン機構を持つ場合)
  • パスワード (単数、独自のログイン機構を持つ場合)
  • ソーシャルグラフサービスのユーザーURL (単数)
  • イベント (複数)

イベントは以下のフィールドを持つ。

  • タイムスタンプ (単数、Unixエポックからの秒数)
  • イベントID (単数、機械可読な文字列)

イベントは以下の種類がある。

  • 投稿
  • 賛美
  • 拡散
  • 削除
  • 疫病
  • 疫病の拡散

投稿は以下のフィールドを持つ。

  • 内容 (単数、文字列)

賛美は以下のフィールドを持つ。

  • オリジナルのテキストサービスのユーザーURL (単数)
  • オリジナルのイベントID (単数)

拡散は以下のフィールドを持つ。

  • オリジナルのテキストサービスのユーザーURL (単数)
  • オリジナルのイベントID (単数)
  • 内容のコピー (単数、文字列)

削除は以下のフィールドを持つ。

  • 削除されたイベントのイベントID (単数)

疫病は以下のフィールドを持つ。

  • タイトル (単数、文字列)
  • 疫病のURL (単数)

疫病の拡散は以下のフィールドを持つ。

  • オリジナルのテキストサービスのユーザーURL (単数)
  • オリジナルのイベントID (単数)
  • タイトルのコピー (単数、文字列)
  • 疫病のURL (単数)

テキストサービスにログインしているユーザーは、パスワードを変更できる。また、イベントを追加することができる。タイムスタンプとイベントIDと疫病のURLは自動的に生成される。

テキストサービスのユーザーには一意なURLが割り当てられる。これをテキストサービスのユーザーURLという。このURLに対してGETメソッドを要求すると、以下の情報が得られる。

  • イベント (複数)

ユーザーがテキストサービスにログインしているとき、テキストサービスは一定時間ごとにリフレッシュ動作を行う。リフレッシュ動作は以下のように行う。

  1. ソーシャルグラフサービスのユーザーURLに対してGETメソッドを発行し、諸情報を得る。
  2. 観察対象のソーシャルグラフサービスのユーザーURLに対してGETメソッドを発行し、諸情報を得る。
  3. 観察対象としているユーザーが、自分自身を新たに観察対象に加えたならば、通知を表示する。
  4. 観察対象のテキストサービスのユーザーURLに対してGETメソッドを発行し、諸情報を得る。
  5. 削除イベントによって無効化されていないイベントを以下のように表示する。ただし、疫病の拡散は削除イベントによって無効化されない。
    • 賛美、拡散、疫病の拡散のオリジンが自分自身であれば、通知を表示する。
    • 投稿または拡散の内容を表示する。このとき、信頼するマルチメディアサービスのホスト名を持つURLが含まれている場合は、そのURLの内容をダウンロードし、自動再生する。
    • 疫病または疫病の拡散のタイトルを表示する。

ユーザーがテキストサービスにログインしており、疫病の内容を表示する操作を行ったとき、テキストサービスは以下のように動作する。

  1. ソーシャルグラフサービスのユーザーURLに対してGETメソッドを発行し、諸情報を得る。
  2. ソーシャルグラフサービスが申告するテキストサービスのユーザーURLが自分自身に一致しているか調べる。一致していなければ、疫病の内容を開示しないことを表すメッセージを表示する。一致していれば、次のステップに進む。
  3. 疫病のURLに対してGETメソッドを発行し、応答を受け取る。このとき引数として、ソーシャルグラフサービスのホスト名と、テキストサービスのユーザーURLのタイムスタンプを渡す。
  4. 疫病サービスが疫病の開示を拒否したならば、疫病の内容を開示しないことを表すメッセージを表示する。そうでなければ、次のステップに進む。
  5. 疫病の拡散イベントを追加する。
  6. 疫病の内容を表示する。

マルチメディアサービス

マルチメディアサービスはファイル (複数) を永続化する。ファイルは以下のフィールドを持つ。

  • ファイル名 (単数、機械可読な文字列)
  • バイトストリーム (単数)

ユーザーはマルチメディアサービスにファイルを追加できる。

ファイルには一意なURLが割り当てられる。これをファイルのURLという。ファイルのURLに対してGETメソッドを要求すると、バイトストリームが得られる。

疫病サービス

疫病サービスはホスト設定 (単数) のレコードを永続化する。ホスト設定は以下のフィールドを持つ。

  • 信頼するソーシャルグラフサービスのホスト名 (複数)
  • 信頼するテキストサービスのホスト名 (複数)
  • テキストサービスのユーザーURLの最低安定時間 (秒、単数)

疫病サービスは疫病 (複数) のレコードを永続化する。疫病は以下のフィールドを持つ。

  • 内容 (単数、文字列)

ユーザーは疫病サービスに疫病を追加できる。

疫病には一意なURLが割り当てられる。これを疫病のURLという。疫病のURLに対してGETメソッドを発行するときは、以下のパラメーターが必要である。

  • ソーシャルグラフサービスのホスト名 (単数)
  • テキストサービスのユーザーURLのタイムスタンプ (単数、Unixエポックからの秒数)

疫病のURLに対してGETメソッドを発行すると、疫病サービスは以下のように動作する。

  1. 下記の条件を満たしているか調べる。
    • GETメソッドを発行したホストが、信頼するテキストサービスのホスト名に含まれている。
    • ソーシャルグラフサービスのホスト名が、信頼するソーシャルグラフサービスのホスト名に含まれている。
    • テキストサービスのユーザーURLのタイムスタンプが、テキストサービスのユーザーURLの最低安定時間よりも古い。
  2. 前項の条件がすべて満たされるならば、疫病の内容を返す。そうでなければ、疫病の開示を拒否するメッセージを返す。