この記事ではRESTの考え方を理解するために、TwitterのURLをRESTの設計原則に従って再設計します。
1. 対象の機能#
今回はTwitterの以下の機能を再設計の対象とします。
- ユーザを表示する
- ツイートする
- ツイートに返信する
- 引用ツイートをする
- リツイートする
- フォローする
- フォロー一覧を表示する
- フォロワー一覧を表示する
- リストを作成する
- リストにユーザを追加する
- リストからユーザを削除する
- リスト一覧を表示する
- リストを表示する
2. URL設計#
| Method | Path | Description |
|---|
| GET | users/{user_id} | 特定のユーザを表示 |
| POST | tweets | ツイートを作成する(返信、引用ツイート含む) |
| POST | retweets | 特定のツイートをリツイートする |
| POST | followings | 特定のユーザをフォローする |
| GET | followings | ログイン中のユーザのフォロー一覧を表示 |
| GET | followers | ログイン中のユーザのフォロワー一覧を表示 |
| GET | users/{user_id}/followings | 特定のユーザのフォロー一覧を表示 |
| GET | users/{user_id}/followers | 特定のユーザのフォロワー一覧を表示 |
| POST | lists | リストを作成する |
| POST | lists/{list_id}/members | 特定のリストに特定のユーザを追加する |
| DELETE | lists/{list_id}/members/{user_id} | 特定のリストから特定のユーザを削除する |
| GET | lists | ログイン中のユーザのリスト一覧を表示 |
| GET | users/{user_id}/lists | 特定のユーザのリスト一覧を表示 |
| GET | lists/{list_id} | 特定のリストを表示 |
3. 解説#
3-1. ツイートする(返信・引用ツイート含む)#
| Method | Path | Description |
|---|
| POST | tweets | ツイートを作成する(返信、引用ツイート含む) |
- ツイートをするのは常にログインユーザのため、URIにログインユーザのidは含めない
- 返信の場合、リクエストのボディに返信先のツイートの情報を含める
- 引用ツイートの場合、リクエストのボディに引用するツイートのidを含める
3-2. リツイートする#
| Method | Path | Description |
|---|
| POST | retweets | 特定のツイートをリツイートする |
- リツイートをするのは常にログインユーザのため、URIにログインユーザのidは含めない
- リクエストのボディにリツイートするツイートのidを含める
3-3. フォローする#
| Method | Path | Description |
|---|
| POST | followings | 特定のユーザをフォローする |
- フォローを実行するのは常にログインユーザのため、URIにログインユーザのidは含めない
- リクエストのボディにフォローするユーザのidを含める
3-4. リストにユーザを追加する#
| Method | Path | Description |
|---|
| POST | lists/{list_id}/members | 特定のリストに特定のユーザを追加する |
- リストへのユーザ追加を実行するのは常にログインユーザのため、URIにログインユーザのidは含めない
- リクエストのボディにリストに追加するユーザのidを含める
3-5. リストを表示する#
| Method | Path | Description |
|---|
| GET | lists/{list_id} | 特定のリストを表示 |
- リストを一意に特定できれば、そこからリストを所有するユーザはわかるため、
users/{user_id}/lists/{list_id}とする必要はない
【参考】