Skip to content

Instantly share code, notes, and snippets.

@higarin
Last active December 23, 2021 03:13
Show Gist options
  • Save higarin/011710cad3955ee1ef2abd129645a731 to your computer and use it in GitHub Desktop.
Save higarin/011710cad3955ee1ef2abd129645a731 to your computer and use it in GitHub Desktop.
practice

ユーザー情報の一覧を取得する

GET /users

レスポンス

[
  {
    "id": 1,
    "name": "tanaka",
    "created_at": "2021-04-01 12:34:56"
  },
  {
    "id": 2,
    "name": "suzuki",
    "created_at": "2021-04-01 12:34:56"
  }
]

以上の例は仮なので、適当な構造、値を返すよう変更しても良いです。

指定したユーザーの情報を取得する

  • 認証されているとき実行できること
  • 存在しない user_id を指定した時, ステータスコード 404 を返却すること
GET /users/{user_id}

レスポンス

{
  "id": 1,
  "name": "tanaka",
  "created_at": "2021-04-01 12:34:56"
}

以上の例は仮なので、適当な構造、値を返すよう変更しても良いです。

認証されているユーザーの情報を取得する

  • 認証されているとき実行できること
GET /users/me

レスポンス

{
  "id": 1,
  "name": "tanaka",
  "created_at": "2021-04-01 12:34:56"
}

以上の例は仮なので、適当な構造、値を返すよう変更しても良いです。

メッセージを作成する

  • 認証されているとき実行できること
POST /messages

リクエストボディ

{
  "content": "メッセージ本文"
}

レスポンス

{
  "id": 1,
  "content": "メッセージ本文",
  "created_at": "2021-04-01 12:34:56"
}

メッセージ一覧を取得する

  • 認証されているとき実行できること
  • created_at の降順で取得できる(新しいメッセージ順)
  • (余裕があれば) ページ割りができること
GET /messages

レスポンス

[
  {
    "id": 2,
    "content": "メッセージ本文",
    "created_at": "2021-04-02 12:34:56",
    "user": {
        "id": 1,
        "name": "tanaka",
        "created_at": "2021-04-01 12:34:56"
    }
  },
  {
    "id": 1,
    "content": "メッセージ本文",
    "created_at": "2021-04-01 12:34:56",
    "user": {
      "id": 2,
      "name": "suzuki",
      "created_at": "2021-04-01 12:34:56"
    }
  }
]

メッセージを取得する

  • 認証されているとき実行できること
  • 存在しない message_id を指定した時, ステータスコード 404 を返却すること
GET /messages/{message_id}

レスポンス

{
  "id": 1,
  "content": "メッセージ本文",
  "created_at": "2021-04-01 12:34:56",
  "user": {
    "id": 1,
    "name": "tanaka",
    "created_at": "2021-04-01 12:34:56"
  }
}

ユーザーが作成したメッセージ一覧を取得する

  • 認証されているとき実行できること
  • 存在しない user_id を指定した時, ステータスコード 404 を返却すること
  • メッセージの created_at の降順で取得できる(新しいメッセージ順)
  • (余裕があれば) ページ割りができること
GET /users/{user_id}/messages

レスポンス

[
  {
    "id": 2,
    "content": "メッセージ本文",
    "created_at": "2021-04-02 12:34:56",
    "user": {                             # 自明なので無くても良さそうです.
        "id": 1,
        "name": "tanaka",
        "created_at": "2021-04-01 12:34:56"
    }
  }
]

メッセージを削除する

  • 認証されているとき実行できること
  • 存在しない message_id を指定した時, ステータスコード 404 を返却すること
DELETE /messages/{message_id}

レスポンス 不要

room

  • ルームの作成
    • ルーム名を指定して作成できる
    • POST /rooms
  • ルームの一覧の取得
    • GET /rooms
  • ルームの取得
    • GET /rooms/{room_id}

テーブル例

id name created_at updated_at
1 ルーム1 ... ...
2 ルーム2 ... ...
... ... ... ...

message

  • 既存のメッセージがroomに紐づく様に変更する
  • ルームに紐づくメッセージ一覧の取得
    • GET /rooms/{room_id}/messages
  • ルームに紐づくメッセージの取得
    • GET /rooms/{room_id}/messages/{message_id}

テーブル例

id room_id user_id content created_at updated_at
1 1 1 hogehoge ... ...
2 2 2 fugafuga ... ...

room(2)

  • ルームの取得 に機能を追加する
    • ルームにひもづく最後のメッセージを追加する
    • GET /rooms/{room_id}

レスポンス例(適当な構造、値を返すよう変更しても良いです)

{
  "id": 1,
  "name": "ルーム1",
  "created_at": "...",
  "updated_at": "...",
  "last_message": {
    "id": 1,
    "content": "hogehoge",
    "created_at": "...",
    "updated_at": "...",
    "user": {
      "id": 1,
      "name": "tanaka",
      "created_at": "...",
      "updated_at": "...",
    }
  }
}

* Line のグループライン や Slack のチャンネルなどの様に、ルームには複数のユーザーが所属します。

  • ルームを作成したユーザーは、自動的にルームに所属します。

  • ルームを作成したユーザーは、ルームにユーザーを追加できます。

    POST /rooms/{id}/users
    Request body: 
    {
      "username": "foo"
    }
    
  • それ以外のユーザーは、追加はできません。

  • ユーザーはルームに自由に参加できます。

    POST /rooms/{id}/userjoin
    Request body: 
    {
    }
    
  • ルームに所属するユーザーの一覧が取得できます。 

    GET /rooms/{id}/users
    Response body:
    [
      {
        "id": 1,
        "name": "tanaka",
        "created_at": "...",
        "updated_at": "...",
      }
    ]
    
  • ユーザーが所属するルームの一覧が取得できます。

    GET /user_rooms?username={username}
    Parameters:
    username: (オプション) 指定したユーザーが所属するルームの一覧を取得します。指定しない場合はリクエストしたユーザーが所属するルームの一覧を取得します。
    Response body:
    [
      {
        "id": 1,
        "name": "ルーム1",
        "created_at": "...",
        "updated_at": "...",
      }
    ]
    
  • ユーザーがルームで最後にメッセージを読んだ時刻を記録できます

    PUT /rooms/{id}/read
    

    できたら (優先度低め)

    • 今までは所属と関係なく メッセージを作成 POST /messages, 取得 GET /rooms/{id}/messages, GET /rooms/{id}/messages/{id} などが行えたが、所属するルームに対してのみリクエストが行える様に変更する。   所属していないルームに対してリクエストを行った時には 403 エラー を返却する。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment