【发布时间】:2015-01-10 01:44:45
【问题描述】:
我正在使用 Django REST 框架构建一个 REST Web API。事情进展顺利,但我偶然发现了嵌套资源的问题。起初,REST API 中的所有关系都是超链接的。例如,一个帖子看起来像这样:
{
"path": "http://api.myproject.com/posts/1.json",
"id": 1,
"author": "http://api.myproject.com/users/broak.json",
"image": "/images/posts/cxyUzlPo.jpg",
"header": "Who am I?",
"footer": "I am a champion!",
"date": "2014-11-09 15:16",
"likes": "http://api.myproject.com/posts/1/likes.json",
"comments": "http://api.myproject.com/posts/1/comments.json",
"likes_count": 0,
"comments_count": 0
}
帖子和作者(用户)之间的关系是超链接的。当您想创建新帖子时,您需要为特定用户指定正确的超链接 - 这很好用。
当调用帖子列表时,事情变得低效,因为您必须为每个帖子的每个作者进行额外的 API 调用。我通过使用 NESTED 资源而不是 HYPERLINKED 资源解决了这个问题,因此现在每个帖子都包含有关作者的所有信息。
{
"path": "http://api.myproject.com/posts/1.json",
"id": 1,
"author": {
"email": "broak@gmail.com"
"username": "broak",
"first_name: "John",
"last_name": "Broak",
"is_staff": False,
"is_active": True,
"last_login": "02-26-2016"
},
"image": "/images/posts/cxyUzlPo.jpg",
"header": "Who am I?",
"footer": "I am a champion!",
"date": "2014-11-09 15:16",
"likes": "http://api.myproject.com/posts/1/likes.json",
"comments": "http://api.myproject.com/posts/1/comments.json",
"likes_count": 0,
"comments_count": 0
}
我的第一个问题是:你有一个指导方针,我应该创建一个嵌套数据结构还是一个带有超链接的单独端点。
我的第二个问题是:当我将作者用作嵌套资源并想创建新帖子时,我不想指定有关作者的所有信息(用户名、电子邮件...)。有没有办法只使用指向用户的链接进行 CREATE/UPDATE 操作?或者修改一些东西,让用户ID足以填写这个字段?
【问题讨论】:
标签: django rest hyperlink resources django-rest-framework