2012-04-24 41 views
6

我正在構建一個REST API,其中有「書籍」和「用戶」。他們只能存在一個獨特的書。雖然用戶可以擁有多本圖書,但不同的用戶可以擁有相同的圖書(或引用相同的圖書)。用戶可以將附加信息添加到書籍(例如評分)。如何處理REST資源何時鏈接並擴展已有資源?

我的問題是:什麼是當用戶使用自己的設置「擴展」已經存在的書資源時映射資源的正確方法?

示例:第一次用戶沒有圖書,但他們可以創建圖書。如果書不存在,則創建該書,如果它存在,則它們可以訪問它。儘管他們可以添加自己的私人附加信息。

這是一個正確的方法嗎?

//使用的基本所需的信息的所有書籍可以在/書籍到達/:ID 示例:/書籍/ 1 {

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

}

//如果用戶創建的書「帝國」(序列號:1234)他們正在擴展已經存在的書,但他們已經添加了額外的信息,所以它實際上是一個新的URL,但指的是書的ID。

例如:/用戶/ 421 /書籍/ 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." 
} 

甚至一個URL不便像/用戶/ 421 /書籍/ 1 /設置/

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

做了@jayraynet回答你的問題? – 2013-01-25 06:55:52

回答

4

我建議允許「評論」與多個父母(書,用戶)相關聯,然後有一個規範的資源爲revie W¯¯如下:

/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}

0評論
{[ 
{ 
"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 
} 
]} 

創建新評論可以是適合用戶/評論,書籍/評論或評論資源的帖子,其服務器實現這些POST服務默認用戶ID或書籤ID。

url鏈接的實現有一些選擇,如atom:link。

此外,請考慮不要將書籍,用戶和評論的原始ID暴露給這些服務的客戶端/使用者,而是將該ID暴露爲URI。

+0

當涉及到身份驗證時,您是否允許**用戶**發佈到其中任何一項,但限制權限或僅限於/用戶...? (給出一些其他授權類型,如作者,出版商等可能主要與/書... – 2013-01-25 06:54:44