6

「本」と「ユーザー」がいるRESTAPIを構築しています。彼らは1冊のユニークな本しか存在できません。ユーザーは複数の本を持つことができ、異なるユーザーは同じ本(または同じ本への参照)を持つことができます。ユーザーは、ブックに追加情報(評価など)を追加できます。

私の質問は、ユーザーが既存のブックリソースを独自の設定で「拡張」しているときにリソースをマップする適切な方法は何ですか?

例:初めてのユーザーは本を持っていませんが、本を作成できます。ブックが存在しない場合は作成され、存在する場合はアクセスできます。彼らはそれに彼ら自身の個人的な追加情報を加えることができますが。

これは適切な方法ですか?

//基本的な必要な情報を含むすべての書籍は/books/:idでアクセスできます例:/ books / 1

{
    "id":1,
    "title":"The Empire",
    "description":"Description about the book",
    "serial":1234
}

//ユーザーが本「TheEmpire」(シリアル:1234)を作成した場合、既存の本を拡張しますが、追加情報が追加されているため、実際には新しいURLですが、本IDを参照します。

例:/ users / 421 / books / 1 /

{
    "id":1,
    "title":"The Empire",
    "description":"Description about the book",
    "serial":1234,
    "rating":5.5,
    "note":"I liked the book but it was too long."
}

あるいは:

{
    "book": {
        id":1,
        "title":"The Empire",
        "description":"Description about the book",
        "serial":1234,
    }
    "rating":5.5,
    "note":"I liked the book but it was too long."
}

または、/ users / 421 / books / 1 /settings/のようなURLsmthですら

{
    "rating":5.5,
    "note":"I liked the book but it was too long."
}
4

1 に答える 1

4

「レビュー」が複数の親 (書籍、ユーザー) に関連付けられるようにしてから、次のようにレビュー用の正規リソースを用意することをお勧めします。

/books/{book-id}

{
"id":1,
"title":"The Empire",
"description":"Description about the book",
"serial":1234
}

本のレビュー/books/{book-id}/reviews

{[
{
"id":1,
"userId":user1,
"bookId":1,
"rating":5.5,
"note":"I liked the book but it was too long.",
"url":http://server/reviews/1
},
{
"id":2,
"userId":user2,
"bookId":1,
"rating":1,
"note":"boo, i didn't like it!",
"url":http://server/reviews/2
}
]}

ユーザーによるレビュー/users/{user-id}/reviews

{[
{
"id":1,
"userId":user1,
"bookId":1,
"rating":5.5,
"note":"I liked the book but it was too long.",
"url":http://server/reviews/1
},
{
"id":2,
"userId":user2,
"bookId":1,
"rating":1,
"note":"boo, i didn't like it!",
"url":http://server/reviews/2
},
{
"id":5,
"userId":user1,
"bookId":3,
"rating":2,
"note":"I like to read",
"url":http://server/reviews/5
}
]}

レビューの正規リソース/reviews/{review-id}

{[
{
"id":1,
"userId":user1,
"bookId":1,
"rating":5.5,
"note":"I liked the book but it was too long.",
"url":http://server/reviews/1
},
{
"id":5,
"userId":user1,
"bookId":3,
"rating":2,
"note":"I like to read",
"url":http://server/reviews/5
}
]}

新しいレビューの作成は、user-id または book-id を適切にデフォルト設定する POST サービスのサーバー実装を使用して、user/reviews、book/reviews、または reviews リソースへの投稿にすることができます。

URL リンクの実装には、atom:link などの選択肢があります。

また、書籍、ユーザー、およびレビューの生の ID をこれらのサービスのクライアント/コンシューマーに公開するのではなく、ID を URI として公開することを検討してください。

于 2012-04-24T15:29:23.150 に答える