この記事では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}
とする必要はない
【参考】