Циркулярные ссылки в 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 конечной точки для сообщения? Или то, что я делаю, просто прекрасно и мне не стоит беспокоиться?

Вернуться на верх