Циркулярные ссылки в REST API
Я разрабатываю REST API (используя Django Rest Framework) и борюсь с проблемой потенциальных циклических ссылок в данных, которые возвращаются из каждой конечной точки.
Я решил сохранить API плоским, а не вложенным, так как считаю, что это делает многие другие вещи (разрешения, например) более понятными.
Допустим, я делаю классическую структуру "блог + посты + комментарии"...
class Post(models.Model):
title = models.CharField()
content = models.TextField()
author = models.ForeignKey(User)
class Comment(models.Model):
post = models.ForeignKey(Post)
content = models.TextField()
Если мой API имеет конечные точки, такие как:-
/api/posts/1/
и:-
/api/comments/1/
тогда они могут легко закончиться сериализацией в:-
{
'title': 'My Title',
'content': 'The content',
'author': {
// user name, email etc.
}
}
и:-
{
'post': {
'title': 'My Title',
'content': 'The content',
'author': {
// user name, email etc.
}
},
'content': 'The comment'
}
Что хорошо. Но это означает, что я должен "знать", что нужно делать select_related для пользователей, когда я получаю комментарии, просто потому, что делая это, я получаю пост, к которому прикреплен комментарий, и у которого есть автор, который является пользователем
Я вижу, что это становится беспорядочным, и я предвижу круговые ссылки, идущие в мою сторону.
Есть ли "рекомендуемый" способ делать подобные вещи? Если да, то какой? Должна ли часть "post" сериализации комментария просто возвращать URL конечной точки для сообщения? Или то, что я делаю, просто прекрасно и мне не стоит беспокоиться?