Я создаю веб-API REST с помощью Django REST Framework. Все идет хорошо, но я, однако, наткнулся на проблему с вложенными ресурсами. Сначала все отношения в REST API были связаны гиперссылками. Столб, к примеру, выглядит следующим образом:Django REST Framework: когда создавать гиперссылки ресурса и когда вложенный ресурс? Как установить POST вложенный ресурс?
{
"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": "[email protected]"
"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? Или изменить что-то, чтобы идентификатор пользователя был достаточно, чтобы заполнить это поле?