X



トップページmiごみ箱
31コメント10KB
シンプルな掲示板サービスの設計を考えたので書く
0001分別排出する名無し2023/08/28(月) 06:43:25.92ID:/WE7WPo20
5chの衰退により今こそ新しいサービスが必要だと感じるので
0002分別排出する名無し2023/08/28(月) 06:52:38.89ID:/WE7WPo20
前提1

この掲示板は半アカウント制
  アカウントなしでも書き込める
  アカウントを作りログインする事で使える機能が増える

この掲示板システムには3種類のIDがある
  スレID (各スレを識別する)
  レスID (5chのレスに付いてるIDと同じ)
  アカウントID (アカウントに自動で割り当てられる内部的なID)
0003分別排出する名無し2023/08/28(月) 06:52:53.77ID:/WE7WPo20
前提2

ログイン状態で他ユーザーをNGするとその情報が記録される
  NGされたユーザーは、NGカウントが増加する
  NGカウントの多さに応じて共有NGのレベルが変動する
    例:
      NGカウントが10以下→レベル1
      NGカウントが20以下→レベル2
0005分別排出する名無し2023/08/28(月) 06:58:11.73ID:/WE7WPo20
アカウント登録に必要な情報
- password
- メールアドレス (認証用)
※ 各アカウントには被りなしのIDが自動で割り当てられる

スレ一覧で取得される情報
- スレID (被りなし、自動割り当て)
- スレタイ
- 日時 (エポックタイム)
- レス数
- スレ立て者のネーム欄の文字列
- >>1の内容
- スレ立て者のレスID
- スレ立て者のアカウントID (未ログイン状態の場合この情報は無し)
- スレ立て者の共有NGのレベル
0006分別排出する名無し2023/08/28(月) 07:00:41.72ID:/WE7WPo20
レス一覧で取得される情報
- 名前欄の文字列
- 本文
- 日時 (エポックタイム)
- レスID
- アカウントID (未ログインは以下略)
- アカウントの共有NGのレベル
0007分別排出する名無し2023/08/28(月) 07:04:04.59ID:/WE7WPo20
レス時に必要な情報
- 名前欄の文字列 (省略可)
- 本文

スレ立て時に必要な情報
- スレタイ
- 名前欄の文字列 (省略可)
- 本文


※スレID、板はエンドポイント(URI)より取得
※時刻、レスIDはサーバー側で付加
※アカウントはセッションを用いて識別
0008分別排出する名無し2023/08/28(月) 07:04:57.76ID:/WE7WPo20
ログイン時に必要な情報
- メールアドレス
- password

ログアウト時に必要な情報
※セッションにより識別するので情報は不要

アカウント削除時に必要な情報
- メールアドレス (要認証)
- パスワード
※ユーザー情報は一定期間保持
0009分別排出する名無し2023/08/28(月) 07:07:16.74ID:/WE7WPo20
他ユーザーのNG時に自動送信される情報
- NG対象のアカウントID
- NGに使用したスレのスレIDとレス番
※ この情報の送信はログインしている時のみ有効
※ NGする側のアカウントはセッションにより識別

フロントエンドでのNGに関しては、アカウントIDではなくレスIDで行うべき (自演を許容するため)
0010分別排出する名無し2023/08/28(月) 07:08:00.23ID:/WE7WPo20
--- APIの概要は以上 ---

以下では具体的なAPI設計について書く
0011分別排出する名無し2023/08/28(月) 07:11:34.05ID:/WE7WPo20
・サーバー一覧の取得

リクエスト
GET origin.some.domain/v1/servers

レスポンス
[ "hawk", "mi", … ]
0012分別排出する名無し2023/08/28(月) 07:12:18.06ID:/WE7WPo20
・アカウント登録

リクエスト
POST origin.some.domain/v1/resister
{
  "password": "fuga",
  "mail": "foo@bar.com"
}

レスポンス
{
  "errno": 0 (when success) or >1 (otherwise),
  "errmsg": ""
}
0013分別排出する名無し2023/08/28(月) 07:12:52.16ID:/WE7WPo20
・アカウント登録(認証)

リクエスト
GET origin.some.domain/v1/auth/:some_hash

レスポンス
{
  "errno": 0(when success) or >1(otherwise),
  "errmsg": ""
}
0014分別排出する名無し2023/08/28(月) 07:16:15.79ID:/WE7WPo20
・板一覧の取得

リクエスト
GET server.some.domain/v1/boards

レスポンス
{
  "news4vip": {
    "name": "ニュー速VIP",
    "default_name": "名無し",
    "explanation": "オワコンの板"
  },
  …
}
0015分別排出する名無し2023/08/28(月) 07:17:29.90ID:/WE7WPo20
・スレ一覧の取得

リクエスト
GET server.some.domain/v1/:board
0016分別排出する名無し2023/08/28(月) 07:17:37.82ID:/WE7WPo20
レスポンス
[
  {
    "thread_id": "123456",
    "title": "タイトル",
    "time": "123456",
    "n_res": 32,
    "name": "名無し",
    "body": "てすと",
    "res_id": "awesomeid0",
    "account_id": "123456",
    "account_ng_level": 2
  },
  …
]
0017分別排出する名無し2023/08/28(月) 07:18:28.09ID:/WE7WPo20
・レス一覧の取得

リクエスト
GET server.some.domain/v1/:board/:thread

レスポンス
[
  {
    "name": "名無し",
    "body": "てすと",
    "time": "123456",
    "res_id": "awesomeid0",
    "account_id": "123456",
    "account_ng_level": 2
  },
  …
]
0018分別排出する名無し2023/08/28(月) 07:18:40.23ID:/WE7WPo20
・差分取得
GET server.some.domain/v1/:board/:thread?from=3
※from=数字はこの数字のレス番以降のレスの取得を意味する
0019分別排出する名無し2023/08/28(月) 07:21:40.87ID:/WE7WPo20
・レスの送信

リクエスト
POST server.some.domain/v1/:board/:thread/new
{
  "name": "名無し",
  "body": "てすと"
}

レスポンス
{
  "errno": 0(when success) or >1(otherwise),
  "errmsg": ""
}
0020分別排出する名無し2023/08/28(月) 07:24:02.13ID:/WE7WPo20
・スレ立て

リクエスト
POST server.some.domain/v1/:board/new
{
  "name": "名無し",
  "body": "てすと",
  "title": "タイトル"
}

レスポンス
{
  "errno": 0(when success) or >1(otherwise),
  "errmsg": ""
}
0021分別排出する名無し2023/08/28(月) 07:27:25.32ID:/WE7WPo20
・ログイン

リクエスト
POST origin.some.domain/v1/login
{
  "mail": "foo@bar.com",
  "password": "123456"
}

レスポンス
{
  "errno": 0(when success) or >1(otherwise),
  "errmsg": ""
}
0022分別排出する名無し2023/08/28(月) 07:29:55.10ID:/WE7WPo20
・ログアウト

リクエスト
POST origin.some.domain/v1/logout

レスポンス
{
  "errno": 0(when success) or >1(otherwise),
  "errmsg": ""
}
0023分別排出する名無し2023/08/28(月) 07:40:02.02ID:/WE7WPo20
・アカウント削除

リクエスト
POST origin.some.domain/v1/delete
{
  "mail": "foo@bar.com",
  "password": "123456"
}

レスポンス
{
  "errno": 0(when success) or >1(otherwise),
  "errmsg": ""
}

※アカウント登録/削除の成功時はメールで認証用URLを送る
0024分別排出する名無し2023/08/28(月) 07:43:41.02ID:/WE7WPo20
・アカウント削除(認証)

アカウント登録(認証)のエンドポイントと兼用とする
0025分別排出する名無し2023/08/28(月) 07:49:43.19ID:/WE7WPo20
「他ユーザーのNG時に自動送信される情報」から以下を削除する事にする
- NGに使用したスレのスレIDとレス番

・他ユーザーのNG情報送信

リクエスト
POST origin.some.domain/v1/ng
{
  "account_id": "123456"
}

レスポンス
{
  "errno": 0(when success) or >1(otherwise),
  "errmsg": ""
}
0026分別排出する名無し2023/08/28(月) 07:49:57.29ID:/WE7WPo20
以上で終わり
0027分別排出する名無し2023/08/28(月) 18:12:47.19ID:mrrIPpcvM
redditみたいなやつ?
0028分別排出する名無し2023/08/28(月) 18:22:25.84ID:/WE7WPo20
redditの方が断然高機能だなぁ
これは5chの機能と同程度の簡単掲示板
0029分別排出する名無し2023/08/28(月) 18:29:35.83ID:mrrIPpcvM
確かに投票機能とか色々あるしなあ
共有NGが付いてるのはいいね
0030分別排出する名無し2023/08/28(月) 18:51:42.98ID:/WE7WPo20
うむ
共有NGは皆で荒らしを撃退してる感があるのが良い
0031分別排出する名無し2023/08/28(月) 18:55:50.20ID:/WE7WPo20
まぁバックエンドはすぐに作れるとして問題はフロントエンドだな
フロントが掲示板作成の9割を占めると言っても過言ではない
誰か全部やってくれないかな
レスを投稿する


ニューススポーツなんでも実況