Ну, я думаю, что невозможно создать два разных ресурса одновременно в RESTful API (потому что вы не можете POST к двум разным URL-адресам одновременно).Поэтому, чтобы сохранить API чистым и RESTful, я бы предпочел, чтобы вы следовали последнему подходу и позволяли создавать их отдельно (если вы не объедините их в один ресурс).Это может быть не так плохо, как кажется.
Я понимаю, что это может привести к появлению вопросов без ответов (я предполагаю, что вопрос - это первая сущность, которая должна появиться, и на этот вопрос следует ответить).Однако в вашем приложении вы могли бы преодолеть это, не работая с вопросами без ответа (например, не отображать их где-либо).
Вы могли бы даже пойти еще дальше и определить собственный класс менеджера, который отфильтровывает эти оставшиеся без ответа вопросы.по умолчанию, например, так:
# assumed that `answers` is related_name in ForeignKey from Answer to Question
class Question( models.Model )
objects = AnsweredQuestionsManager()
all_questions = models.Manager()
@property
def is_answered( self ):
return self.answers.count() > 0
class AnsweredQuestionsManager( models.Manager ):
def get_query_set( self ):
return super( AnsweredQuestionManager, self )\
.get_query_set().annotate(
num_answers = Count( 'answers' ) ).filter( num_answers__gt = 0 )
, тогда Question.objects.all()
будет возвращать только вопросы с ответами, а Question.all_questions.all()
будет также включать вопрос без ответа.
Чтобы ваша база данных была относительно чистойвы можете периодически избавляться от старых вопросов без ответа (например, с помощью Cron).
Надеюсь, это заставит вас немного больше склоняться к разделению:)