我正在构建一个REST API,我有"Books"和"Users".他们只能存在一本独特的书.虽然用户可以拥有多本书籍,但不同的用户可以拥有相同的书籍(或引用相同的书籍).用户可以向书籍添加其他信息(例如评级).
我的问题是:当用户使用自己的设置"扩展"现有的Book资源时,映射资源的正确方法是什么?
示例:第一次用户没有书籍,但他们可以创建书籍.如果Book不存在则会创建它,如果它存在则可以访问它.虽然他们可以添加自己的私人附加信息.
这是一种正确的方法吗?
//所有包含基本必需信息的书籍都可以在/ books /:id上找到示例:/ books/1 {
"id":1,
"title":"The Empire",
"description":"Description about the book",
"serial":1234
Run Code Online (Sandbox Code Playgroud)
}
//如果用户创建了"The Empire"一书(序列号: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."
}
Run Code Online (Sandbox Code Playgroud)
甚至:
{
"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."
}
Run Code Online (Sandbox Code Playgroud)
或者甚至像/ users/421/books/1/settings /这样的网址
{
"rating":5.5,
"note":"I liked the book but it was too long."
}
Run Code Online (Sandbox Code Playgroud)
我建议允许“评论”与多个家长(书籍、用户)相关联,然后拥有用于评论的规范资源,如下所示:
书/books/{book-id}
{
"id":1,
"title":"The Empire",
"description":"Description about the book",
"serial":1234
}
Run Code Online (Sandbox Code Playgroud)
一本书的评论/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
}
]}
Run Code Online (Sandbox Code Playgroud)
用户的评论/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
}
]}
Run Code Online (Sandbox Code Playgroud)
审查的规范资源/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
}
]}
Run Code Online (Sandbox Code Playgroud)
创建新评论可以是对用户/评论、书籍/评论或评论资源的发布,这些 POST 服务的服务器实现根据情况默认用户 ID 或书籍 ID。
url链接的实现有一些选择,例如atom:link。
另外,请考虑不要向这些服务的客户端/消费者公开书籍、用户和评论的原始 ID,而是将 ID 作为 URI 公开。
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |