В моем приложении есть учащиеся, которые могут записаться на классы.
В регистрации записываются даты начала и окончания вместе со ссылкой на класс.
Класс содержит подробные сведения, такие как имя и описание класса.
Студент (1) - (N) Зачисление (1) - (1) Класс
Следовательно
Студент (1) - (N) класс
Вот как я хотел бы, чтобы объект выглядел.
{
"studentId": 1,
"name": "Henrietta",
"enrolledClasses": [
{
"enrollmentId": 12,
"startDate": "2015-08-06T17:43:14.000Z",
"endDate": null,
"class":
{
"classId": 15,
"name": "Algebra",
"description": "..."
}
},
"enrollmentId": 13,
"startDate": "2015-08-06T17:44:14.000Z",
"endDate": null,
"class":
{
"classId": 29,
"name": "Physics",
"description": "..."
}
}
}
Но мой RESTful API не может (легко) выводить полную вложенную структуру отношений, потому что ORM не может выполнять отношения «многие ко многим» со сквозными отношениями. Таким образом, я получаю студента и его несколько зачислений, но только ссылку на класс для каждого, а не детали. И мне нужно показать детали, а не только идентификатор.
Я мог бы дождаться, пока объект учащегося станет доступным, а затем использовать ссылки, чтобы сделать дополнительные вызовы API для каждого classId, чтобы получить подробности, но я не уверен, как и даже если бы затем интегрировать его с объектом учащегося.
Это то, что у меня есть до сих пор.
function findOne() {
vm.student = StudentsResource.get({
studentId: $stateParams.studentId
});
};
Это то, что я получаю от своего API
{
"studentId": 1,
"name": "Henrietta",
"enrolledClasses": [
{
"enrollmentId": 12,
"startDate": "2015-08-06T17:43:14.000Z",
"endDate": null,
"class": 15
},
"enrollmentId": 13,
"startDate": "2015-08-06T17:44:14.000Z",
"endDate": null,
"class": 29
}
}
А что касается деталей класса, я могу их по одному, но не понял, как дождаться, пока объект ученика будет доступен, чтобы втолкнуть их в него. И как их правильно толкать...
{
"classId": 15,
"name": "Algebra",
"description": "..."
}
{
"classId": 29,
"name": "Physics",
"description": "..."
}
Вопрос
Хорошо ли объединять сведения об учащемся и классе(ах) в зачислении в один объект?
- Если да, то какой самый понятный способ сделать это?
- Если нет, то какой другой эффективный подход?
Имейте в виду, что приложение позволяет вносить изменения в сведения об учащихся и зачислениях, но не должно позволять вносить изменения в сведения о названии или описании класса. Поэтому, если Angular должен был отправить PUT для объекта, он не должен пытаться отправить детали любого класса, а только ссылку. Это будет принудительно на стороне сервера для защиты данных, но во избежание ошибок клиент не должен пытаться.
Для фона я использую SailsJS и PostgreSQL для серверного API.