私はに取り組んでおり、REST API
階層リソースを処理する方法を理解しようとしています。
バックグラウンド
簡単な例から始めましょう。私のAPIには、ユーザー、ユーザープロファイル、レビューがあります。
- ユーザーにはユーザープロファイルが関連付けられている必要があります(ユーザープロファイルは1人のユーザーにのみ対応します)
- ユーザーにはレビューが関連付けられている場合があります(レビューは1人のユーザーにのみ対応します)
ユーザーのリソース表現は次のようになります。
User: {
"u1": "u1value", // User's attributes
"u2": "u2value",
...
"links": [{
"rel": "profile",
"href": "http://..." // URI of the profile resource
}, {
"rel": "review",
"href": "http://..." // URI of the review resource
}]
}
ユーザープロファイルのリソース表現は次のようになります。
UserProfile: {
"p1": "p1value", // Profile attributes
"p2": "p2value",
...
"links": [{
"rel": "owner",
"href": "http://..." // URI of the user resource
}]
}
レビューリソースの表現は次のようになります。
Review: {
"r1": "r1value", // Review attributes
"r2": "r2value",
...
"links": [{
"rel": "owner",
"href": "http://..." // URI of the user resource
}]
}
リソースURIは次のようになります。
http://api.example.com/users/{userid}
:ユーザーリソースへのアクセスhttp://api.example.com/users/{userid}/profile
:ユーザーのプロファイルリソースへのアクセスhttp://api.example.com/users/{userid}/review
:ユーザーのレビューリソースへのアクセス
リソースの作成:ユーザーを作成する正しい方法は何ですか?
次に、新しいユーザーを作成します。
POST http://api.example.com/users {"u1": "bar", "u2": "foo"}
新しいユーザーID=42を取得しますPOST http://api.example.com/users/42/profile {"p1": "baz", "p2": "asd"}
PUT http://api.example.com/users {"u1": "bar", "u2": "foo", links: [{"rel": "profile", "href": "http://api.example.com/users/42/profile"]}
私の懸念:
- 何かが1と2または2と3の間で壊れた場合はどうなりますか?
- 3)では、サーバーはhttp://api.example.com/users/42/profile内のリンクを自動的に更新して、正しい所有者を指すようにする必要がありますか?
- リンクフィールドを更新することは、関係を作成するための適切な方法ですか?または、手順3)をスキップして、URI規則に従ってシステムに関係を推測させる必要がありますか?(私は、URIが不透明であると見なされるべきであるといくつかの本を読みました。)